-2

我正在比较大型数组以查找丢失的元素。但是一个数组将全部大写,而另一个则不是。所以我想格式化一个数组,但遇到了问题。这是我尝试格式化的数组的一个示例。

array = [ 023, "Bac001", "abc123"]

然后我尝试将所有内容都大写

array.map!(&:upcase)

但为 023 获取未定义的方法“大写”

有没有解决的办法?

4

2 回答 2

5

我会使用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"]
于 2013-09-16T15:49:47.033 回答
4
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}]
于 2013-09-16T15:30:37.857 回答