如何从Ruby对象实例中的实例方法访问setter和getter方法?

时间:2016-06-08 14:20:13

标签: ruby

这个问题是关于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

2 个答案:

答案 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