說我有很多屬性的類,但需要一次只有一個屬性,即輸出一個在與紅寶石
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
什麼是這樣做的最佳方式?
說我有很多屬性的類,但需要一次只有一個屬性,即輸出一個在與紅寶石
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
什麼是這樣做的最佳方式?
編輯:
你不會只考慮創造,這是否對你的類中的方法?
def as_string(sym)
"value of #{sym.to_s}: #{send(sym)}"
end
然後你可以使用a.as_string(:attributename)
來得到你想要的結果?否則,你正在尋找作爲一個對象的屬性,做attr_accessors
是不是真的要走的路..
老答案:
你需要重寫to_s
方法的類定義。請注意,這被puts
隱式調用 - 當一個方法需要一個字符串時,它會自動嘗試to_s
,所以你不需要。
'a.name'的做法是什麼?您可能想重寫'to_s'方法而不是添加'to_str'方法 - 'to_s'是Ruby用來確定對象的字符串表示形式的方法。它實際上是'a.to_s',你想成爲*名稱而不是'a.name.to_s'嗎? – mikej 2010-10-11 08:48:53
你爲什麼需要提名姓名?是不是一個字符串? – 2010-10-11 08:51:19
A類有許多屬性,而且使用a.name.to_str我只想獲取字符串格式的name屬性,以及父對象的名稱。 – poseid 2010-10-11 08:55:22