Вывести один атрибут за раз с использованием to_str в Ruby - PullRequest
0 голосов
/ 11 октября 2010

Скажем, у меня есть класс со многими атрибутами, но мне нужен только один атрибут за раз, т.е.

   class A
     attr_accessor :name
     attr_accessor :other1
     attr_accessor :other2
     attr_accessor :other3
     attr_accessor :other4
   end

И хотите выводить только один атрибут за раз:

   a = A.new
   puts a.name.to_str

быть:

  name value of a: value_of_name

Каков наилучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 11 октября 2010

Редактировать:

Вы не хотели бы просто создать метод в классе, который сделает это за вас?

def as_string(sym)
  "value of #{sym.to_s}: #{send(sym)}"
end

Тогда вы могли бы использовать a.as_string(:attributename) получить желаемый результат?В противном случае вы ищете атрибут, который будет действовать как объект, и выполнение attr_accessors на самом деле не лучший путь.

Старый ответ:

Вам необходимо переопределить метод to_s в определении класса.Обратите внимание, что это неявно вызывается puts - когда метод ожидает строку, он автоматически пытается to_s, поэтому вам не нужно.

0 голосов
/ 11 октября 2010

В классе A создайте метод to_s. Это должно переопределить значение по умолчанию.

, например

class A
def initialize
end

def to_s
puts "Name for a: #{name}"
end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...