2.10. 核心语言——对象,类,方法-5

未匹配的标注

[] 和 []=

一些数据类型允许他们的成员通过方括号的这种符号来访问。就像数组里面 array[0] 或者是通过 array[0] = x 来赋值。这些符号也是方法调用,调用的方法是 [][]=

class List
  # called when `list[n]` is used
  def [](n)
    # ...
  end

  # called when `list[n] = x` is used
  def []=(n, x)
    # ...
  end
end

私有方法

对象的实例变量是完全私有的,不能直接地从对象外部进行访问,而必须通过对象的方法去间接访问。一个对象还可以有私有方法。这种方法只能通过同一个对象的其他方法进行调用,而不能够从外部调用。关键字 private 就使得所有在它之后的方法都是私有的。

class Robot
  def initialize(name)
    set_name(name)
  end

  private

  def set_name(name)
    @name = name
  end
end

self

在同一个类里面调用其他的方法,这个 . 操作符 是不需要的。 set_name(name) 看起来就像是调用一个全局函数,但是并不是。当一个方法前面没有对象时,它实际上是隐含了一个 self。这个是一直都被忽略的。知道了这个,我们就可以明白前面的 hello world 这个程序,实际上它是在前面有一个 self.

self.puts("hello world")

puts 它不是一个关键词或者是一个全局函数,它是一个定义在所有对象上的方法。在顶层——在任何方法定义的外面——对 self 的调用,是会被分发到 main 这个对象,它是一个代表全局范围的特殊对象。

因为 self. 是通常不需要的,你不会经常看到它被使用。它通常在和 attr_writer 的配合当中使用。比如 self.x = y 就意味着是 self.x=(y) 这个方法调用,然而 x = y 只是对一个局部变量 x 的赋值。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~