我正在比较大型数组以查找丢失的元素。但是一个数组将全部大写,而另一个则不是。所以我想格式化一个数组,但遇到了问题。这是我尝试格式化的数组的一个示例。
array = [ 023, "Bac001", "abc123"]
然后我尝试将所有内容都大写
array.map!(&:upcase)
但为 023 获取未定义的方法“大写”
有没有解决的办法?
我正在比较大型数组以查找丢失的元素。但是一个数组将全部大写,而另一个则不是。所以我想格式化一个数组,但遇到了问题。这是我尝试格式化的数组的一个示例。
array = [ 023, "Bac001", "abc123"]
然后我尝试将所有内容都大写
array.map!(&:upcase)
但为 023 获取未定义的方法“大写”
有没有解决的办法?
我会使用Object#respond_to?
:
def upcase_elements(ary)
ary.map { |e| e.respond_to?(:upcase) ? e.upcase : e }
end
upcase_elements([23, "BAC001", "ABC123"])
#=> [23, "BAC001", "ABC123"]
检查接收者是否响应方法比检查其类型更灵活:
upcase_elements([:foo, "bar"])
#=> [:FOO, "BAR"]
array.map! { |s| s.kind_of?(String) ? s.upcase : s }
这不会尝试对数组的任何非字符串元素进行大写。因此它将适用于以下数组:
array = [23, 1.27, "Bac001", "abc123", {:foo => 3}]
产量:
[23, 1.27, "BAC001", "ABC123", {:foo => 3}]