このように実行可能な方法で文字列内にブロックを埋め込む方法はありますか?
for i in 1..1000
test "There once was #{if i=1{'a man'} else {'many men'} end} from kilkenny"
end
はい、#{}
文字列が使用される前に内部のすべてが評価されるため、有効な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=
の値をリセットする代入演算子です。i
1
Rubyではnilとfalseを除くすべての値がtrueであるため、提案されたif .. thenは常にtrueになります。これは、trueをi=1
返すため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
Rubyの三項演算子を使用できます。
for i in 1..1000
puts "There once was #{i == 1 ? 'a man' : 'many men'} from kilkenny"
end