Pythonの `s =“ hello、%sに相当するRubyとは何ですか。%sはどこですか?」%(「ジョン」、「メアリー」) `


141

Pythonでは、この文字列フォーマットのイディオムは非常に一般的です

s = "hello, %s. Where is %s?" % ("John","Mary")

Rubyで同等のものは何ですか?


3
文字列の連結はなく、文字列のフォーマットのみです。そして、グーグルはこれまでにない速さでこれに答えます... Rubyでまったく同じことができることを見つけるのに約20秒かかりました。

あなたは連結を求めているのではなく、フォーマット/置換を求めています。質問を変更する必要があります。ちなみに、ルビでは+や<<演算子で連結を行います。
デビッド

回答:


246

最も簡単な方法は文字列補間です。Rubyコードの小さな断片を文字列に直接挿入できます。

name1 = "John"
name2 = "Mary"
"hello, #{name1}.  Where is #{name2}?"

Rubyでフォーマット文字列を実行することもできます。

"hello, %s.  Where is %s?" % ["John", "Mary"]

角かっこを必ず使用してください。Rubyにはタプルはありません。配列だけで、角かっこを使用します。


1
私は間違いなく最初のものを使用します、それは私にはより読みやすく見えます
David

1
最初の変数は機能せず、#{}は変数を検索するため、この場合は文字列「John」ではなく、John変数を出力します。2つ目は正しいようです。
Jason Noble

11
また、と同じではないため、常に二重引用符使用するように注意する必要があります。'#{name1}'"#{name1}"
Droogans

3
文字列補間は一重引用符では機能しません。二重引用符を使用する必要があります。例:が'#{"abc"}' # => "\#{\"abc\"}"、必要なのは"#{"abc"}" # => "abc"
bschlueter

2
最初の方法は同等ではありません-テンプレートを値として渡すことはできません。
OndraŽižka17年

51

Ruby> 1.9ではこれを行うことができます:

s =  'hello, %{name1}. Where is %{name2}?' % { name1: 'John', name2: 'Mary' }

ドキュメントを見る


私はそこでIdomatic Rubyで編集しましたが、受け入れられた回答がすでにそれを実行していることに気づきました-'edit 'を再び削除しました:-/
toong

文字列%演算子でハッシュを使用する場合、フォーマット文字列で参照されているキーシンボルが存在しないと、KeyErrorが発生します。
user1164178 2015

19

ほとんど同じ方法:

irb(main):003:0> "hello, %s. Where is %s?" % ["John","Mary"]
=> "hello, John. Where is Mary?"

Rubyでは、角括弧はタプルを意味しますか?角かっこはリストだと思いました...
TIMEX、

@TIMEX:この質問は役に立ちます:stackoverflow.com/questions/525957/tuples-in-ruby
Manoj Govindan

3
Rubyにはタプルがありません(少なくとも言語に偽造されていません)。ええ、それは配列です(Pythonの「リスト」は本当に配列と呼ばれるべきです...)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.