, если у меня есть метод с равным знаком в конце:метод = с несколькими параметрами
class A
def property= name, value
...
end
end
Как вызвать метод property=
и передать аргументы к нему?
, если у меня есть метод с равным знаком в конце:метод = с несколькими параметрами
class A
def property= name, value
...
end
end
Как вызвать метод property=
и передать аргументы к нему?
У 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
спасибо за это, хотя это не то, что я спросил. :) – akonsu
@muistooshort: Конечно, был! Дох, спасибо за это. – Chuck
@akonsu: Но то, что вы просили, не имеет особого смысла, если вы не хотите, чтобы все, использующие ваш код, ненавидели вас. Если вы «def p = (a, b)», то люди должны «o.send (: p =, a, b)» вызвать ваш метод, и это не сделает кого-то счастливым. –
вот что я закончил с (спасибо @LeeJarvis за его/ее комментарий):
class A
def property= value
x, y = value
p [x, y]
end
end
A.new.property = 1, 2
как 'значение' взял 1,2 без использования оператора' splat'? –
... Я не знаю – akonsu
так смешно ... :) :) –
Вы пытаетесь установить массив как значение свойства, или вы ищете наборщик словарного стиля? – Chuck
У меня есть класс, внутри которого есть хэш. Я хочу иметь метод, который устанавливает значение для данного ключа. Я мог бы иметь 'set_property (имя, значение)', но я думал, может быть, у меня может быть сеттер, который выглядит лучше. – akonsu
У вас нет. Метод 'property =' может принимать только один аргумент, но это будет массив, например: 'def property = (value) ... x.property = 'foo', 'bar''' value' теперь будет '['foo', 'bar']' –