这个问题是关于Ruby中的setter和getter方法。在下面的示例中,我有三种方法。前两个分别是获取和设置实例变量@login_method
。第三种是尝试访问setter方法的实例方法。它无法访问setter方法,因为当行login_method = 15
运行时,执行不会停止在setter方法中放置的调试器语句。
为什么我不能从方法mymeth
内部访问setter方法?如果我使用" self"作为setter方法调用的前缀,我可以访问它,但为什么我必须这样做?
require 'byebug'
class MyClass
def login_method
debugger;
@login_method
end
def login_method=(value)
debugger;
@login_method
end
def mymeth
debugger;
login_method = 15
end
end
obj = MyClass.new
obj.mymeth
答案 0 :(得分:1)
您的login_method=
实例方法需要接收器。如果这对你来说并不重要,你可以将其设为私有,这应该可以解决问题
private
def login_method=(value)
debugger;
@login_method
end
答案 1 :(得分:1)
试试这个:
class MyClass
def login_method
@login_method
end
def login_method=(value)
@login_method = value
end
def mymeth
self.login_method = 15
end
end
obj = MyClass.new
obj.mymeth
puts obj.login_method
你也可以这样做:
class MyClass
attr_accessor :login_method
def mymeth
self.login_method = 15
end
end
obj = MyClass.new
obj.mymeth
puts obj.login_method