我試圖創建一個類,做了幾件事情: 1)實現自定義的getter的屬性 2)調用自定義的getter從初始化方法中調用自定義的getter方法從內部初始化
這裏是什麼樣子:
class Book
# RSolr lib for interacting with Solr
require 'rsolr'
# Instance variables
@isbn
@title
# Solr playlist instance URL
@solr_domain
@solr
def initialize(isbn)
@solr_domain = "http://solr.com:9003/solr"
@solr = RSolr.connect :url => @solr_domain
@isbn = isbn
@title = self.title(isbn)
end
# Get Solr URL
def solr_domain
return @solr_domain
end
# Set Solr URL and reset Solr connection object
def solr_domain(newurl)
@solr_domain = newurl
@solr = RSolr.connect :url => @solr_domain
end
# Custom getter for title
def title=(isbn)
result = solr.get 'select', :params => {:q => 'isbn:(' + isbn + ')'}
return result["response"]["docs"][0]["title"]
end
end
的關鍵線
@title = self.title(isbn)
,我們試圖呼籲針鋒相對的吸氣劑le,以便在對象初始化時設置標題。
我們想要的是一個可公開訪問的標題吸氣器,以及在對象初始化期間填充@title的方法。
嗯。感謝這個想法。這似乎應該工作,但是當我將@ title = self.title(isbn)添加到initialize方法時,當嘗試實例化新的Book對象時,出現「ArgumentError:錯誤的參數數量(1代表0)」 。 (我也爲這個類添加了一個attr_accessor:標題) – Sly 2011-04-21 19:09:39
忘記我對'attr_accessor'所說的話,我沒有正確閱讀你的例子。 – 2011-04-21 19:18:16
好的。這個錯誤與我打電話給self.title的方式有關。它應該是self.title = isbn,而不是@title = self.title(isbn)。而且,我改變了標題方法以在其中設置@title,而不是在initialize中明確地設置它。我會給你這個,因爲你讓我指出了正確的方向。感謝關於類和實例變量之間差異的額外鏈接 - 非常有幫助! – Sly 2011-04-21 20:58:50