Ruby 为什么要使用concat操作符
我是ruby新手,但我很确定这些东西是等效的。但我正在给一个重要的剧本创造机会,我只是想确认一下 这就是他们现在所拥有的:Ruby 为什么要使用concat操作符,ruby,Ruby,我是ruby新手,但我很确定这些东西是等效的。但我正在给一个重要的剧本创造机会,我只是想确认一下 这就是他们现在所拥有的: def generate_names options names = [] name = options.name sen = options.sen ari = options.ari options.targets.each do |target| names << "#{name}" + " Test " + "#{targ
def generate_names options
names = []
name = options.name
sen = options.sen
ari = options.ari
options.targets.each do |target|
names << "#{name}" + " Test " + "#{target}"
end
names
end
除此之外,我在irb
中尝试了这一点,但给出了错误:
"#{name}" + " Test " + "#{target}".eql?("#{name} Test #{target}") ? "equal" : "not"
给出的错误是:
TypeError: no implicit conversion of false into String
from (irb):20:in `+'
from (irb):20
from /usr/bin/irb:12:in `<main>'
TypeError:没有将false隐式转换为字符串
from(irb):20:in`+'
起始(irb):20
from/usr/bin/irb:12:in`'
请分别查看以下内容:
names << "#{name}" + " Test " + "#{target}"
这将创建一个字符串并将其插入。插值几乎总是比串联好,因为它创建的垃圾更少
您的irb
测试有缺陷:
"#{name}" + " Test " + "#{target}".eql?("#{name} Test #{target}") ? "equal" : "not"
这将首先对.eql?
零件的目标进行评估,该目标显然不匹配,因此其评估结果为:
("#{name}" + " Test " + false) ? "equal" : "not"
这将失败,因为您不能将false
与字符串组合
测试这一点的方法是强制执行特定的评估顺序:
("#{name}" + " Test " + "#{target}").eql?("#{name} Test #{target}") ? "equal" : "not"
请分别看这一点:
names << "#{name}" + " Test " + "#{target}"
这将创建一个字符串并将其插入。插值几乎总是比串联好,因为它创建的垃圾更少
您的irb
测试有缺陷:
"#{name}" + " Test " + "#{target}".eql?("#{name} Test #{target}") ? "equal" : "not"
这将首先对.eql?
零件的目标进行评估,该目标显然不匹配,因此其评估结果为:
("#{name}" + " Test " + false) ? "equal" : "not"
这将失败,因为您不能将false
与字符串组合
测试这一点的方法是强制执行特定的评估顺序:
("#{name}" + " Test " + "#{target}").eql?("#{name} Test #{target}") ? "equal" : "not"
非常感谢你!!即使是irb票据。也就是说,他阻止我再接受7分钟的回答。我前面的人年纪大,所以我很犹豫。我真的很欣赏你的速度!非常感谢你!!即使是irb票据。也就是说,他阻止我再接受7分钟的回答。我前面的人年纪大,所以我很犹豫。我真的很欣赏你的速度!