Подтвердить что ты не робот

Как динамически вызывать методы доступа в Ruby

Независимо от того, является ли это хорошей практикой или нет, как я могу динамически вызывать методы доступа в Ruby?

Вот пример класса:

class Test_Class
  attr_accessor :a, :b
end

Я могу использовать метод Object.send для чтения переменной...

instance.a = "value"
puts( instance.send( "a" ) )
# => value

Но мне трудно писать. Они выбрасывают "неправильное количество аргументов (1 для 0) (ArgumentError)"

instance.send("a", "value")

и

instance.method("a").call("value")

Пожалуйста, помогите мне StackOverflow!

4b9b3361

Ответ 1

Я не эксперт по рубину, но я думаю, что вы могли бы сделать:

instance.send("a=", "value")

Ответ 2

Вы также можете напрямую обращаться к переменным экземпляра объекта с помощью функций instance_variable_*:

instance = Test_Class.new                 # => #<Test_Class:0x12b3b84>

# instance variables are lazily created after first use of setter,
# so for now instance variables list is empty:
instance.instance_variables                # => []

instance.instance_variable_set(:@a, 123)   # => 123
instance.a                                 # => 123
instance.instance_variables                # => ["@a"]
instance.instance_variable_get("@a")       # => 123