Ruby 用地图分割!不';行不通

Ruby 用地图分割!不';行不通,ruby,Ruby,为什么是地图!不适用于拆分的字符串 str = "abcd" str.split('').map! { |x| x + "!" } str # => "abcd" 我希望这将返回[“a!”、“b!”、“c!”、“d!”]str.split(“”)返回一个新数组。正在调用.map不会更改原始的str 将str.split(“”)的结果分配回str: str = str.split('') str.map! { |x| x + "!" } str # => ["a!", "b!"

为什么是地图!不适用于拆分的字符串

str = "abcd"  
str.split('').map! { |x| x + "!" }
str # => "abcd"
我希望这将返回
[“a!”、“b!”、“c!”、“d!”]
str.split(“”)
返回一个新数组。正在调用
.map不会更改原始的
str

str.split(“”)
的结果分配回
str

str = str.split('')
str.map! { |x| x + "!" }
str  # => ["a!", "b!", "c!", "d!"]
str = str.split('').map! { |x| x + "!" }
str  # => ["a!", "b!", "c!", "d!"]
或者,将整个结果分配回
str

str = str.split('')
str.map! { |x| x + "!" }
str  # => ["a!", "b!", "c!", "d!"]
str = str.split('').map! { |x| x + "!" }
str  # => ["a!", "b!", "c!", "d!"]
注意

最初使用相同的变量保存字符串,然后保存数组可能会使代码的读取器感到困惑。最好对数组使用不同的变量

arr = str.split('')
arr.map! { |x| x + "!" }
arr  # => ["a!", "b!", "c!", "d!"]
str.split(“”)
返回一个新数组。正在调用
.map不会更改原始的
str

str.split(“”)
的结果分配回
str

str = str.split('')
str.map! { |x| x + "!" }
str  # => ["a!", "b!", "c!", "d!"]
str = str.split('').map! { |x| x + "!" }
str  # => ["a!", "b!", "c!", "d!"]
或者,将整个结果分配回
str

str = str.split('')
str.map! { |x| x + "!" }
str  # => ["a!", "b!", "c!", "d!"]
str = str.split('').map! { |x| x + "!" }
str  # => ["a!", "b!", "c!", "d!"]
注意

最初使用相同的变量保存字符串,然后保存数组可能会使代码的读取器感到困惑。最好对数组使用不同的变量

arr = str.split('')
arr.map! { |x| x + "!" }
arr  # => ["a!", "b!", "c!", "d!"]

因为您正在就地更新是的,但是您浪费了那个数组对象,因为您没有将其实例保存到任何地方

characters = "abcd".split('')
characters.map! { |x| x + "!" }
characters

请注意,您可以从
split(“”)
移动到
chars

,因为您正在就地更新是的,但是由于您没有将其实例保存到任何位置而浪费的数组对象

characters = "abcd".split('')
characters.map! { |x| x + "!" }
characters
请注意,您可以从
split(“”)
移动到
chars

,也可以使用

你也可以使用


@steenslag,谢谢你的更正。我相应地更新了答案。OP将数组存储在名为
str
的变量中的意图非常令人困惑,尤其是当它最初包含字符串时。这个答案可能会尝试提出一个更好的代码版本,其中包含两个不同的变量,以澄清其意图。@SirDarius,我同意。我将更新答案以包含您的建议。谢谢您的评论。@steenslag,谢谢您的更正。我相应地更新了答案。OP将数组存储在名为
str
的变量中的意图非常令人困惑,尤其是当它最初包含字符串时。这个答案可能会尝试提出一个更好的代码版本,其中包含两个不同的变量,以澄清其意图。@SirDarius,我同意。我将更新答案以包含您的建议。感谢您的评论。我理解其他答案背后的原因,即尽可能接近原始实现,但在我看来,这是最具可读性的解决方案。虽然在这种情况下,我建议使用
每个字符
映射(与其他答案一样)相反,为了避免创建已处理的
数组
,我理解其他答案背后的原因,以便尽可能接近原始实现,但我认为这是最具可读性的解决方案。虽然在这种情况下,我建议使用
每个字符
映射
(与其他答案一样)以避免创建已处置的
数组
如何知道它不起作用?您从未为正在映射的数组指定引用ping,那么您如何查看它来检查它是否工作?您如何知道它不工作?您从未为正在映射的数组指定引用ping,那么您如何查看它来检查它是否工作?