如果没有提供,我有以下使用默认类的类方法:
def self.make_sandwich(bread = Bread, butter = Butter, cheese = Cheese)
...
end
所以我可以调用它并传递一类名为MyBread的新面包
[class].make_sandwich(MyBread)
但是如何在没有黄油的情况下传递面包和奶酪? 我知道我可以更改顺序或使用attr_accessor来使用默认类(如果没有提供),但假设我不能修改那段代码
答案 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)