ruby - 接受参数作为单个对象或对象数组

标签 ruby parameters parameter-passing

我有一堆函数接受对象数组,或设计为被视为包含一个对象的数组的单个对象,我正在寻找一种更简洁的方法来实现这一点。基本上,我想知道如何使以下函数中的 unless 部分更简洁:

def foo(bar_or_bars)
  unless bar_or_bars.is_a?(Array)
    bar_or_bars = [bar_or_bars]
  end
  bar_or_bars.each { |baz| ... }
end

任何帮助将不胜感激!谢谢。

最佳答案

最简单的解决方案是使用内核方法 Array :

Array(5) #=> [5]
Array([1, 2, 3]) #=> [1,2,3]

所以

def foo(bar_or_bars)
  Array(bar_or_bars).each { |bar| ... }

这甚至适用于以数组作为元素的嵌套数组(它们不会被展平)。

Hashes 不适用于此方法的一种情况:

Array(a: 1, b: 2) #=> [[:a, 1], [:b, 2]]

如果您想遍历未更改的 Hash 对象,最好使用 Array.wrap来自 ActiveSupport。

关于ruby - 接受参数作为单个对象或对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9475767/

相关文章:

Java 和编程新手。我究竟做错了什么? (方法,参数)

php - 如何将值从 Node Js 传递到 php 然后返回?

ruby-on-rails - Rails 模型可以有一组关联吗?

ruby-on-rails - Ruby - 查找括号内的字符

mysql - Ruby on Rails : Error on rake db:migrate

ruby-on-rails - 将密码重置发送到其他电子邮件 - Devise

c++ - 从 IDE 调用 Makefile 进行调试/发布

c++ - 从祖先的方法和构造函数调用后代的方法

Java:将具有不同类型的参数传递给函数

java - 将 Java 引用传递到对象链的最佳方式