2010-10-11 52 views
0
to_str使用時間屬性

說我有很多屬性的類,但需要一次只有一個屬性,即輸出一個在與紅寶石

 
    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 

什麼是這樣做的最佳方式?

+1

'a.name'的做法是什麼?您可能想重寫'to_s'方法而不是添加'to_str'方法 - 'to_s'是Ruby用來確定對象的字符串表示形式的方法。它實際上是'a.to_s',你想成爲*名稱而不是'a.name.to_s'嗎? – mikej 2010-10-11 08:48:53

+0

你爲什麼需要提名姓名?是不是一個字符串? – 2010-10-11 08:51:19

+0

A類有許多屬性,而且使用a.name.to_str我只想獲取字符串格式的name屬性,以及父對象的名稱。 – poseid 2010-10-11 08:55:22

回答

0

編輯:

你不會只考慮創造,這是否對你的類中的方法?

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

然後你可以使用a.as_string(:attributename)來得到你想要的結果?否則,你正在尋找作爲一個對象的屬性,做attr_accessors是不是真的要走的路..

老答案:

你需要重寫to_s方法的類定義。請注意,這被puts隱式調用 - 當一個方法需要一個字符串時,它會自動嘗試to_s,所以你不需要。

+0

謝謝。我看到attr_accessors的使用對於我的目的是有限的 – poseid 2010-10-11 09:27:41

+0

「欣賞比任何財務獎勵都更有價值。」 – amaseuk 2010-10-11 09:42:39

0

在A類中創建一個to_s方法。這應該覆蓋默認的一個。

例如

class A 
def initialize 
end 

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

end 
+0

我想調用to_str屬性名稱而不是對象a。這可能嗎? – poseid 2010-10-11 08:46:02

+0

可能最好在這種情況下創建自己的方法,以您的首選格式顯示名稱? – amaseuk 2010-10-11 08:47:14

+0

你的意思是,除了用自定義的to_str定義一個類名並且將其包含到A中之外別無他法? – poseid 2010-10-11 08:51:54