如何将对象传递给类方法

时间:2013-11-22 12:47:40

标签: ruby class class-method

如果没有提供,我有以下使用默认类的类方法:

def self.make_sandwich(bread = Bread, butter = Butter, cheese = Cheese)
  ...
end

所以我可以调用它并传递一类名为MyBread的新面包

[class].make_sandwich(MyBread)

但是如何在没有黄油的情况下传递面包和奶酪? 我知道我可以更改顺序或使用attr_accessor来使用默认类(如果没有提供),但假设我不能修改那段代码

1 个答案:

答案 0 :(得分:2)

如果您使用的是ruby 2.0,则可以使用keyword arguments

如果您使用的是旧版ruby,则可以使用hash opts参数。

def self.make_sandwich(opts = {:bread => Bread, 
                               :butter => Butter, 
                               :cheese => Cheese})

  bread_to_use = opts[:bread]
end

make_sandwich(:bread => some_bread,
              :cheese => some_cheese)

或者,您可以在方法的正文中设置默认值,然后在方法调用中传递nil

def self.make_sandwich(bread = nil, butter = nil, cheese = nil)
  bread ||= Bread
  butter ||= Butter
  cheese ||= Cheese
  ...
end

make_sandwich(bread, nil, cheese)