2013-11-22 73 views
0

我有一个使用默认类,如果不提供以下类方法:如何对象传递给类方法

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

这样我就可以把它和通过了一类新的面包叫做MyBread

[class].make_sandwich(MyBread) 

但是我怎么能通过没有黄油的面包和奶酪? 我知道我可以更改顺序或使用attr_accessor如果没有提供使用默认类,但假设我不能修改该代码的方式

回答

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)