我试图创建一个类,做了几件事情: 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