我在做
String.new.tap do |string|
polygon.points.each do |point|
x, y = point.x + (page_padding/2), point.y + (page_padding/2)
string += "#{x}, #{y} "
end
end
但它返回一个空字符串。
如果我打电话
Array.new.tap do |array|
polygon.points.each do |point|
x, y = point.x + (page_padding/2), point.y + (page_padding/2)
array << "#{x}, #{y} "
end
end
它返回一个修改后的数组。为什么这不适用于字符串?
使用 ruby 2.4.0
最佳答案
+=
不是突变子:str1 += str2
创建一个新字符串。使用 <<
改变字符串:
string1 = 'foo'
string1.object_id
=> 70298699576220
(string1 += '2').object_id # changed
=> 70298695972240
(string1 << '2').object_id # not changed: original object has been mutated
=> 70298695972240
tap
只是将自己交给 block ,然后返回自己。自 self
在您的实例中不会发生变化,点击只会返回原始值。
关于ruby - 为什么 String.tap 不返回修改后的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42586200/