0

このようなフォーマット文字列を保存するにはどうすればよいですか

s = "test with #{value}"

後でこれができるように

puts s % {:value => 'hello'}

私が最初に書いた場合、それvalueは見つからないと文句を言います(本当、後でそれを提供したいです)。生の文字列を使用すると、s = 'test with #{value}'補間されません。

私は特にこれを試しました:

@format_html = "<a href=\"http://boardgamegeek.com/user/%{who.sub ' ', '+'}\">%{who}</a> receives <a href=\"%{got[0]}\">%{got[1]}</a> from <a href=\"http://boardgamegeek.com/user/%{from.sub ' ', '+'}\">%{from}</a> and sends <a href=\"%{given[0]}\">%{given[1]}</a> to <a href=\"http://boardgamegeek.com/user/%{to.sub ' ', '+'}\">%{to}</a>"
puts @format_html % {:who   => 'who',
                        :given => 'given',
                        :from  => 'from',
                        :got   => 'got',
                        :to    => 'to'}

そして私はこれを手に入れます:

KeyError (key{who.sub ' ', '+'} not found):
4

2 に答える 2

5

これは、ruby1.9以降でのみ機能します。

s = "test with %{value}"
puts s % { value: 'hello' } # => test with hello
于 2012-12-15T10:16:51.383 に答える
0

pickaxe http://pragprog.com/book/ruby3/programming-ruby-1-9は以下のように述べていString#%ます:

フォーマット仕様に複数の置換が含まれている場合、argは置換される値を含む配列である必要があります。

@format_html = "<a href=\"http://boardgamegeek.com/user/%s\">%s</a> receives <a href=\"%s\">%s</a> from <a href=\"http://boardgamegeek.com/user/%s\">%s</a> and sends <a href=\"%s\">%s</a> to <a href=\"http://boardgamegeek.com/user/%s\">%s</a>"
h = {:who   => 'who',
     :given => ['given1', 'given2'],
     :from  => 'from    ',
     :got   => ['got1', 'got2'],
     :to    => 'to     '}
who, given, from, got, to = h.values
who_plus  = who.gsub(' ', '+')
got0      = got[0]
got1      = got[1]
from_plus = from.gsub(' ', '+')
given0    = given[0]
given1    = given[1]
to_plus   = to.gsub(' ', '+')
puts @format_html % [who_plus, who, got0, got1, from_plus, from, given0, given1, to_plus, to]

実行:

$ ruby -w t.rb
<a href="http://boardgamegeek.com/user/who">who</a> receives <a href="got1">got2</a> from <a href="http://boardgamegeek.com/user/from++++">from    </a> and sends <a href="given1">given2</a> to <a href="http://boardgamegeek.com/user/to+++++">to     </a>
于 2012-12-15T12:11:23.010 に答える