我正在处理一个必须转换为二维数组的字符串:
rows = [['1', '2'], ['10', '20']]
我需要这些值作为整数而不是字符串。我可以遍历它们,然后执行map
,例如:
rows.each {|row| row.map!(&:to_i)}
我试图创建一个可链接的to_i
方法,因此我可以运行rows.to_i
。
def to_i
each do |nested|
nested.map!(&:to_i)
end
end
这毫不奇怪地失败了:
NoMethodError: undefined method `to_i' for [["1", "2"], ["10", "20"]]:Array
因为Array
未实现该方法。除了修补Array
类的猴子以外,还有其他合适的方法吗?
另一种替代方法是:
def ary_to_i array
array.each do |nested|
nested.map!(&:to_i)
end
end
但是我发现方法调用ary_to_i(rows)
令人困惑。
答案 0 :(得分:1)
尽管这是一种反模式,但您可以猴子修补""
类:
showvalues1
但是我最好在OP中使用后者。
边注:改变数组从来都不是一个好主意,但是如果您这样做,请像我的示例一样选择一个以bang结尾的名称。
答案 1 :(得分:1)
您可以仅为行定义to_i
方法:
rows = [['1','2'], ['10','20']]
def rows.to_i
each do |nested|
nested.map!(&:to_i)
end
end
p rows.to_i # => [[1, 2], [10, 20]]