是否存在用于返回第一个数组元素的ruby习语,如果只存在一个?

New*_*ria 7 ruby arrays ruby-on-rails

如果数组只包含一个值,我想返回数组的第一个元素.

目前,我使用:

vals.one? ? vals.first : vals.presence
Run Code Online (Sandbox Code Playgroud)

从而:

vals = []; vals.one? ? vals.first : vals.presence
# => nil

vals = [2]; vals.one? ? vals.first : vals.presence
# => 2

vals = [2, 'Z']; vals.one? ? vals.first : vals.presence
# => [2, "Z"]
Run Code Online (Sandbox Code Playgroud)

是否有内置的东西可以做到这一点,还是有更好的设计考虑?


我的用例是特定的,涉及知道该方法会有什么期望的演示者(将实现上述代码).如果这些演示者将所有返回作为数组处理,那么在大多数情况下(~90%),它们将迭代大小1或数组0.

Ste*_*zyn 2

您似乎想要处理 val 数组未定义的情况,所以......

val.size > 1 ? val : val[0] if defined?(val)
Run Code Online (Sandbox Code Playgroud)

但正如已经指出的那样,最好提供一致的参数(始终是数组),因此以下内容将提供 val 数组或空数组(如果未定义)

defined?(val) ? val : []
Run Code Online (Sandbox Code Playgroud)