Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么要使用concat操作符_Ruby - Fatal编程技术网

Ruby 为什么要使用concat操作符

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

我是ruby新手,但我很确定这些东西是等效的。但我正在给一个重要的剧本创造机会,我只是想确认一下

这就是他们现在所拥有的:

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分钟的回答。我前面的人年纪大,所以我很犹豫。我真的很欣赏你的速度!