我有一种感觉,我在这里错过了很简单的东西。我有一个链接到外部服务的类。我想通过调用create方法或find方法来实例化它。两种方法都会使用哈希填充实例变量“@node”,方法是创建节点或查找它。
我有
class GenreInfluence
@@neo ||= Neography::Rest.new()
attr_accessor :node
def initialize
end
def self.create
@node = @@neo.create_node
self.new
end
def self.find(node_id)
@node = @@neo.get_node(node_id)
self.new
end
def get_hash
@node
end
如果我评论发生了什么,我可以看到它正在创建类并获得正确的哈希值:
theInstance = GenreInfluence.find(20)
theInstance.get_hash
只需返回零。为什么哈希没有存储在实例变量中??
答案 0 :(得分:9)
您无法在非实例(静态或类)方法中设置实例变量。此外,您的方法都返回self.new
,这有效地返回了一个没有设置实例变量的类的新实例。
如何在静态类方法中创建类的新实例,在该实例上设置变量 ,然后返回它(而不是返回self.new
) :
class GenreInfluence
@@neo ||= Neography::Rest.new()
attr_accessor :node
def initialize
end
def self.create
influence = self.new
influence.node = @@neo.create_node
influence
end
def self.find(node_id)
influence = self.new
influence.node = @@neo.get_node(node_id)
influence
end
def get_hash
@node
end
end
答案 1 :(得分:3)
您将从find方法返回self.new
。这是GenreInfluence
的一个新实例,带有一组新的实例变量。
答案 2 :(得分:1)
怎么样
class GenreInfluence
@@neo ||= Neography::Rest.new()
attr_accessor :node
def initialize(node_id = nil)
if (node_id.nil?) then
@node = @@neo.create_node
else
@node = @@neo.get_node(node_id)
end
end
def find(node_id)
@node = @@neo.get_node(node_id)
end
def get_hash
@node
end
end
然后
theInstance = GenreInfluence.new()
theInstance.get_hash
theInstance1 = GenreInfluence.new(20)
theInstance1.get_hash
theInstance2 = GenreInfluence.new()
theInstance2.get_hash
theInstance2.find(20)
theInstance2.get_hash