2

我认为在调用私有方法时,放置显式接收器是不可接受的。好吧,我在 Ruby 2.0 中做了这个,我可以得到结果:

class Test
  def public_method
    self.set_size=10
  end

  def return_size
    @size
  end

  private

  def set_size=(size)
    @size = size
  end

 end

test = Test.new
test.public_method
p test.return_size

为什么是这样?

4

2 回答 2

2

可以使用. _ self事实上,它们必须通过显式接收器调用,否则它们根本无法调用,因为

foo = bar

是对局部变量的赋值,而不是方法调用。

于 2013-11-15T02:54:42.000 回答
0

你是对的,除了一件事...... setters ( def method=) 可以用self的显式接收者调用,这样你就可以调用私有 setter。

所以,实际上,如果你要这样做:

class Test
  def public_method
    self.say_hi
  end

  def return_size
    @size
  end

  private

  def say_hi
    puts "oh hay there"
  end

 end
test = Test.new
test.public_method
test.return_size

它会抛出一个private method say_hi called for..

于 2013-11-15T02:36:29.190 回答