这会产生一个无限循环,我不知道为什么会这样。当我不使用push命令时,循环就不会发生。

#strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
symbols = [ "a", "b", "c" ]
symbols.each do |x|
  symbols.push(x.to_sym)
end

最佳答案

下面的代码将项追加到symbols数组(同一个数组),同时对其进行迭代;块通过追加到数组来提供无限项。(each将这些项用于迭代)

symbols.each do |x| symbols.push(x.to_sym) end
#^^^^^^             ^^^^^^^

使用Enumerable#map代替:
symbols.map { |x| x.to_sym }
# => [:a, :b, :c]
symbols.map &:to_sym
# => [:a, :b, :c]

或者使用另一个数组而不是使用同一个数组。
new_symbols = []
symbols.each do |x| new_symbols.push(x.to_sym) end
new_symbols
# => [:a, :b, :c]

关于ruby - 尝试将字符串转换为符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21201589/

10-15 13:00