这是什么意思?

如以下代码来自“为什么的尖锐指南”:

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中的字符串连接与插值