0

このように実行可能な方法で文字列内にブロックを埋め込む方法はありますか?

for i in 1..1000
  test "There once was #{if i=1{'a man'} else {'many men'} end} from kilkenny"
end
4

3 に答える 3

3

はい、#{}文字列が使用される前に内部のすべてが評価されるため、有効なRubyコードである必要があります。試す:

1.upto(1000) do |i|
  puts "There once was #{i==1?"a man":"many men"} from kilkenny"
end

ここでは、Rubyやその他の言語で使用される三項演算子を使用しました。これは基本的に次のとおりです。

(boolean condition) ? (return this on true) : (return this on false)

また==、Rubyの等式演算子であるdoubleequalにも注意してください。シングルイコールは、コード内ですべてのループでto=の値をリセットする代入演算子です。i1

Rubyではnilとfalseを除くすべての値がtrueであるため、提案されたif .. thenは常にtrueになります。これは、trueをi=1返すため1です。

于 2013-01-07T02:00:53.473 に答える
1

あなたはすでに三項演算子で答えを得ています。

たぶん、%-メソッドを使用した別のバージョンでは、より良い概要が得られます。3つの異なるバージョンの例:

1.upto(10) do |i|
  puts "There once was %s from kilkenny" % (i==1 ? "a man" : "many men")
  puts "There once was %s from kilkenny" % if i==1;  "a man"; else  "many men"; end
  puts "There once was %s from kilkenny" % case i
      when 1;  "a man" 
      else   "many men"
      end      
end

また、問題にハッシュを使用することもできます。

man = Hash.new("many men")
man[1] = "a man"
man[2] = "two men"
1.upto(10) do |i|
  puts "There once was #{man[i]} from kilkenny"
end

end

または、別のバージョンのハッシュ作成を使用します。

man = Hash.new(){|h, key|
  h[key] =case key
    when 1
      "a man"
    when 2
      "two men"
    else 
      "many men"
    end
}
1.upto(10) do |i|
  puts "There once was #{man[i]} from kilkenny"
end
于 2013-01-07T11:38:16.090 に答える
1

Rubyの三項演算子を使用できます。

for i in 1..1000
  puts "There once was #{i == 1 ? 'a man' : 'many men'} from kilkenny"
end
于 2013-01-07T02:01:08.277 に答える