我觉得我在这里遗漏了一些非常简单的东西。我有一个链接到外部服务的类。我想通过调用创建方法或查找方法来实例化它。这两种方法都将通过创建节点或查找节点来使用散列填充实例变量“@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
只返回零。为什么散列没有存储在实例变量中!?
最佳答案
您不能在非实例(静态或类)方法中设置实例变量。此外,您的两个方法都返回 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
关于ruby-on-rails - 在 Ruby 中实例化一个类并填充实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5190465/