我试图在初始化后访问ruby中的变量,但是我没有得到那个变量,那有什么不对吗?
class Test
def initialize(params)
@has_test = params[:has_test]
@limit_test = params[:limit_test]
end
def self.method1(params)
Test.new(params)
#can i get that two instance variable
end
end
答案 0 :(得分:2)
您应该设置属性访问器,然后以这种方式使用它们:
class Test
attr_accessor :has_test
attr_accessor :limit_test
def initialize(params)
@has_test = params[:has_test]
@limit_test = params[:limit_test]
end
def self.method1(params)
t = Test.new(params)
// can i get that two instance variable
// Yes:
// use t.has_test and t.limit_test
end
end
答案 1 :(得分:1)
您正在混合示例中的实例和类方法。
如果这确实是您想要的,那么您必须使用attr_reader
定义一个访问者:
class Test
def initialize(params)
@has_test = params[:has_test]
@limit_test = params[:limit_test]
end
attr_reader :has_test
attr_reader :limit_test
def self.method1(params)
obj = Test.new(params)
p obj.has_test
p obj.limit_test
end
end
Test.method1(has_test: 1, limit_test: 3)
实例/类方法是一个错误,那么这个例子可以帮助你:
class Test
def initialize(params)
@has_test = params[:has_test]
@limit_test = params[:limit_test]
end
def method1()
p @has_test
p @limit_test
end
end
obj = Test.new(has_test: 1, limit_test: 3)
obj.method1
如果你在第一段代码中也定义了访问器,那么你可以再次从课外访问。
如果您不想要读者,请参阅Access instance variable from outside the class