私は文字列の中で配列を列挙しようとしており、配列の値を文字列の中に補間しようとしています。文字列の中で列挙する
例:
todos = ["sleep", "eat", "powernap"]
"Today I have todo: \n" +
'#{todos.each do |todo| }'
"\t #{todo}" +
'#{end}'
OUTPUT:
"Today I have todo: \n\tsleep\neat\npowernap"
私は文字列の中で配列を列挙しようとしており、配列の値を文字列の中に補間しようとしています。文字列の中で列挙する
例:
todos = ["sleep", "eat", "powernap"]
"Today I have todo: \n" +
'#{todos.each do |todo| }'
"\t #{todo}" +
'#{end}'
OUTPUT:
"Today I have todo: \n\tsleep\neat\npowernap"
あなたはERBの<%...%>
あるいはPHPの<?php
のように動作するように#{...}
を期待しているが、それはそうではないのです。文字列の補間には、構文的に有効な完全なRuby式が含まれていなければならず、そのコードは不完全です。
あなたは単数表現することを手直しすることができます。これはパフォーマンスの面で、多くの場合、次善のですが、
"Today I have todo: #{todos.join("\t "}"
それとも、手動で繰り返しを行うことができますあなたのよう
todos.each_with_object("Today I have todo:") do |todo, buffer|
buffer << "\t " << todo
end
最初のバージョンがはるかに簡潔であることがわかります。
Rubyの文字列補間オプションは通常は柔軟性がありませんが、コードには自己完結型のコードが必要です。
私はあなたがこれをしたいと仮定します。
Today I have todo:
sleep
eat
powernap
はあなたが単一の文字列に配列内の文字列をオンにする、その後、タブと改行の各要素をラップするjoinをmapを使用できます。これを行うには。
todos.map {|todo| "\t#{todo}\n"}.join("")
これは、各要素の周りに改行とタブを置き、各要素を連結します。文字列に変数を埋め込むには、#{}
を使用して連結を使用していることに注意してください。それはまた"\t" + todo + "\n"
だったかもしれません、まったく同じです。
結果は次のとおりです。
"\tsleep\n\teat\n\tpowernap\n"
その後、あなたは文字列で、何も特別なことは必要ありませんことを連結することができます。
puts "Today I have todo:\n" +
todos.map {|todo| "\t#{todo}\n"}.join("") +
"I hope I get them done!\n"
これを行う方法はたくさんありますが、重要なことは文字列を生成することです。それは配列を生成しますので、each
は動作しません、あなたはこのような何かを得るでしょう:
Today I have todo:
["sleep", "eat", "powernap"]
I hope I get them done!
あなたは、あなたが文字列内#{}
に式全体を置くことによって、文字列の補間としてこれを行うことができますしたい場合。リストをカンマ区切りの文字列に変換する簡単な例を示します。
puts "Today I have todo: #{todos.join(", ")}\n"
任意の式は#{}
に入ることができますが、#{}
は、完全な表現が含まれている必要があります!各#{}
は単独で実行され、各結果は文字列に連結されます。
''今日私はtodo:\ n \ t#{todos。( "\ n")} " – Aguardientico
これは完璧に機能しました。 –