为什么ruby在这种方法中需要自我明确?

时间:2014-05-03 16:09:53

标签: ruby setter

在下面的代码中,如果省略starting_nodeself不会被解释为setter方法;它变成了一个局部变量。

class Stack
  attr_accessor :starting_node
  def push(node)
    ...
    self.starting_node = node
    ...
  end
end

为什么在其他地方隐式工作时需要显式的self

如果这样,变量赋值如何工作:

local_variable.=("some string")

无效,即使不是方法,它是什么?

1 个答案:

答案 0 :(得分:1)

因为否则无法在方法内部设置局部变量。例如:

class ExampleClass
  attr_reader :last_set
  def method_missing(name, *args)
    if name.to_s =~ /=$/
      @last_set = args.first
    else
      super
    end
  end

  def some_method
    some_variable = 5 # Set a local variable? Or call method_missing?
    puts some_variable
  end
end