美文网首页
Ruby 特殊变量 self

Ruby 特殊变量 self

作者: changsanjiang | 来源:发表于2017-10-21 10:49 被阅读9次

    在实例方法中, 可以用 self 这个特殊的变量来引用方法的接收者. 接下来我们看看其他实例方法如何调用 name 方法.

    class HelloWorld
      attr_accessor :name
      def initialize(name = "Ruby")
         @name = name
      end
    
      def greet
        puts "Hi, I am #{self.name}."
      end
    end
    

    greet 方法中的 self.name 引用了调用 greet 方法时的接收者.
    调用方法时, 如果省略的接收者, Ruby 就会默认把 self 作为该方法的接收者. 因此, 即使省略了 self, 也还是可以调用 name 方法. 如下所示:

    def greet 
      puts "Hi, I am #{name}"
    end
    

    另外, 在调用 name= 这样的以 = 结束的方法时, 有一点需要特别注意.
    在实例方法中定义 name = "Ruby" 这样的定义, 如果仅在方法内部定义名为name的局部变量, Ruby不会以缺省接收者的方式调用 name= 方法. 这种情况下 我们需要用 self.name = "Ruby" 的形式来显式的调用 name=方法.

    def test_name
      name = "Ruby"        # 局部变量
      self.name = "Ruby"   # 调用 name= 方法
    end
    

    虽然 self 本身与局部变量形式相同, 但由于它是引用对象本身时的保留字, 因此即使对他进行赋值, 也不会对其本身有任何影响. 像这样, 已经被系统使用且不能被我们自定义的变量名还有 nil, true, false, __FILE__, __LINE__, __ENCODING__等.

    相关文章

      网友评论

          本文标题:Ruby 特殊变量 self

          本文链接:https://www.haomeiwen.com/subject/afsbuxtx.html