2013-03-28 5 views
2

, если у меня есть метод с равным знаком в конце:метод = с несколькими параметрами

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

Как вызвать метод property= и передать аргументы к нему?

+0

Вы пытаетесь установить массив как значение свойства, или вы ищете наборщик словарного стиля? – Chuck

+0

У меня есть класс, внутри которого есть хэш. Я хочу иметь метод, который устанавливает значение для данного ключа. Я мог бы иметь 'set_property (имя, значение)', но я думал, может быть, у меня может быть сеттер, который выглядит лучше. – akonsu

+1

У вас нет. Метод 'property =' может принимать только один аргумент, но это будет массив, например: 'def property = (value) ... x.property = 'foo', 'bar''' value' теперь будет '['foo', 'bar']' –

ответ

3

У Ruby уже есть специальный синтаксис сеттера для пар ключ-значение. Вы можете увидеть его в использовании с Hash:

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: Конечно, был! Дох, спасибо за это. – 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

так смешно ... :) :) –

Смежные вопросы