2013-07-09 30 views
2

我試圖創建一個類,其中包含Singleton模塊,同時使用attr_accessor。這似乎並沒有工作。Ruby Singleton attr_accessor

require 'singleton' 

class Foo 
    attr_accessor :bar 
    include Singleton 
end 

Foo.bar = 'foobar' 

這給了錯誤:

undefined method `bar=' for Foo:Class (NoMethodError) 

我在做什麼錯在這裏?

+0

你調用一個類的方法,而不是你不已經實現了一個實例方法。辛格爾頓是一個只有一個存在的例子的類。你應該在一個實例上而不是在課堂上進行呼叫。 –

回答

4

Singleton不改變的方式attr_accessor作品。它只確保你只能有一個實例。所以你必須在本徵類中調用attr_accessor,就像你沒有Singleton一樣。

class Foo 
    singleton_class.class_eval{attr_accessor :bar} 
end 
+1

謝謝。我非常喜歡這個解決方案,因爲使用我的寶石的人不需要做'Foo.instance.blah ...' –

2

嘗試 -

 Foo.instance.bar = 'foobar' 

記錄在案HereHere

1

方法採用attr_accessors實例方法,您要調用的方法bar=Foo類,沒有定義它定義。你必須讓Foo第一的實例,然後調用bar=它:

Foo.instance.bar = "whatever"