2013-03-28 54 views
2

如果我有在端部与等号的方法:方法=具有多个参数

class A 
    def property= name, value 
    ... 
    end 
end 

我怎样调用该方法property=和参数传递给它?

+0

你是否试图设置一个数组作为属性的值,或者你在寻找一个字典式的setter? – Chuck

+0

我有一个内部有散列的类。我想有一个方法为给定的键设置一个值。我可以拥有'set_property(name,value)',但我想也许我可以有一个更好看的setter。 – akonsu

+1

你没有。 'property ='方法只能接受一个参数,但它会是一个数组,如下所示:'def property =(value)... x.property ='foo','bar''' value' now will be '['foo','bar']' –

回答

3

Ruby已经为键值对设置了特殊的setter语法。你可以看到它在使用中与哈希:

phone_numbers = { Bob: "555-555-1234", Francine: "555-555-5678"} 
phone_numbers[:Jenny] = "555-867-5309" 

为了得到这个语法自己的类,你只是做

def []=(key, value) 
    # set the value however you like 
end 
+0

谢谢你,虽然这不是我问的。 :) – akonsu

+0

@ muistooshort:当然了! Doh,谢谢你。 – Chuck

+0

@akonsu:但是你要求的东西没有多大意义,除非你希望每个人都使用你的代码来憎恨你。如果你'def p =(a,b)',那么人们必须'o.send(:p =,a,b)'来调用你的方法,这不会让任何人开心。 –

1

这里是我结束了(感谢@LeeJarvis他/她的评论):

class A 
    def property= value 
    x, y = value 
    p [x, y] 
    end 
end 

A.new.property = 1, 2 
+0

如何'价值'花了1,2而不使用'splat'运算符? –

+0

...我不知道 – akonsu

+0

太搞笑了... :) :) –