为什么要映射! doens使用分裂的字符串?
str = "abcd"
str.split('').map! { |x| x + "!" }
str # => "abcd"
我预计会返回["a!","b!","c!","d!"]
答案 0 :(得分:3)
str.split('')
返回一个新数组。针对新字符串调用.map!
不会更改原始str
。
将str.split('')
的结果分配回str
:
str = str.split('')
str.map! { |x| x + "!" }
str # => ["a!", "b!", "c!", "d!"]
或者,将整个结果分配回str
:
str = str.split('').map! { |x| x + "!" }
str # => ["a!", "b!", "c!", "d!"]
注意强>
最初使用相同的变量来保存字符串,然后保存数组可能会混淆代码的读者。你最好为数组使用不同的变量;
arr = str.split('')
arr.map! { |x| x + "!" }
arr # => ["a!", "b!", "c!", "d!"]
答案 1 :(得分:1)
因为您正在更新就地是,但是因为您没有将其实例保存在任何地方而浪费的数组对象。
split('')
请注意,您可以从chars
移至By.XPath("//a[@class='txtLnk'")
答案 2 :(得分:1)
您也可以使用#chars
:
> "abcd".chars.map { |x| x + '!' }
=> ["a!", "b!", "c!", "d!"]