这是什么意思?
如以下代码来自“为什么的尖锐指南”:
def wipe_mutterings_from( sentence ) unless sentence.respond_to? :include? raise ArgumentError, "cannot wipe mutterings from a #{ sentence.class }" end while sentence.include? '(' open = sentence.index( '(' ) close = sentence.index( ')', open ) sentence[open..close] = '' if close end end
在Ruby双引号字符串中 – 包括字符串文字,如s = "…"
和s = %Q{ ... }
和s = <
#{ … }
用于“字符串插值”,插入动态内容到字符串中。 例如:
i = 42 s = "I have #{ i } cats!" #=> "I have 42 cats!"
它等效于(但更方便和有效)使用字符串连接以及对to_s
显式调用:
i = 42 s= "I have " + i.to_s + " cats!" #=> "I have 42 cats!"
您可以在区域内放置任意代码,包括多行上的多个表达式。 评估代码的最终结果是调用它来确保它是一个字符串值:
"I've seen #{ i = 10 5.times{ i+=1 } i*2 } weasels in my life" #=> "I've seen 30 weasels in my life" [4,3,2,1,"no"].each do |legs| puts "The frog has #{legs} leg#{:s if legs!=1}" end #=> The frog has 4 legs #=> The frog has 3 legs #=> The frog has 2 legs #=> The frog has 1 leg #=> The frog has no legs
请注意,这在单引号字符串中没有任何影响:
s = "The answer is #{6*7}" #=> "The answer is 42" s = 'The answer is #{6*7}' #=> "The answer is #{6*7}" s = %Q[The answer is #{ 6*7 }] #=> "The answer is 42" s = %q[The answer is #{ 6*7 }] #=> "The answer is #{6*7}" s = < "The answer is 42\n" s = <<'ENDSTRING' The answer is #{6*7} ENDSTRING #=> "The answer is #{6*7}\n"
为方便起见,如果要仅插入实例变量( @foo
),全局变量( $foo
)或类变量( @@foo
)的值,则字符串插值的{}
字符是可选的:
@cats = 17 s1 = "There are #{@cats} cats" #=> "There are 17 cats" s2 = "There are #@cats cats" #=> "There are 17 cats"
"#{}"
表示Ruby字符串插值。请参阅Here
获取太多答案。
#{}
用于Ruby插值。 在这个例子中,
这将引发带有消息的ArgumentError,
cannot wipe mutterings from a
这是一个有用的读取 – Ruby中的字符串连接与插值