3

特定のパターンに従って多くの文字列があります。

string = "Hello, @name. You did @thing." # example

基本的に、私の文字列は @word が動的な記述です。実行時にそれぞれを値に置き換える必要があります。

string = "Hello, #{@name}. You did #{@thing}." # Is not an option!

@word は基本的に変数ですが、上記の方法を使用することはできません。どうすればいいですか?

4

2 に答える 2

10

検索/置換を行う代わりに、Kernel#sprintfメソッドまたはその%短縮形を使用できます。ハッシュと組み合わせると、非常に便利になります。

'Hello, %{who}. You did %{what}' % {:who => 'Sal', :what => 'wrong'}
# => "Hello, Sal. You did wrong" 

配列の代わりにハッシュを使用する利点は、順序を気にする必要がなく、文字列の複数の場所に同じ値を挿入できることです。

于 2013-03-13T19:41:06.033 に答える
4

%文字列の演算子を使用して動的に切り替えることができるプレースホルダーで文字列をフォーマットできます。

string = "Hello, %s. You did %s"

puts string % ["Tony", "something awesome"]
puts string % ["Ronald", "nothing"]

#=> 'Hello, Tony. You did something awesome'
#=> 'Hello, Ronald. You did nothing'

考えられるユース ケース:名前とアクションをパラメーターとして受け取るスクリプトを作成しているとします。

puts "Hello, %s. You did %s" % ARGV

'tony' と 'nothing' が最初の 2 つのパラメーターであると仮定すると、'Hello, Tony. You did nothing'.

于 2013-03-13T19:41:55.517 に答える