具有字符串和数字的upcase数组

Jos*_*sch -2 ruby arrays string-formatting

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

array = [ 023, "Bac001", "abc123"]
Run Code Online (Sandbox Code Playgroud)

然后我尝试将所有东西都资本化

array.map!(&:upcase)
Run Code Online (Sandbox Code Playgroud)

但是为023获取未定义的方法'upcase'

有没有解决的办法?

Ste*_*fan 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"]
Run Code Online (Sandbox Code Playgroud)

检查接收器是否响应方法比检查其类型更灵活:

upcase_elements([:foo, "bar"])
#=> [:FOO, "BAR"]
Run Code Online (Sandbox Code Playgroud)