Ruby中::运算符
::运算符
复习一下Ruby
中::
双冒号。::是一个计算符号,和+-*/
一样,但是::的优先级是非常高的,应该是最高优先级(是不是最高不确定,没仔细核查过,但是优先级非常高是肯定的)
.运算符
.
号很熟悉了,.
运算符可以在类或者实例后面通过.
来访问方法,例如Dir.each
,注意这里只是访问method
,而不能访问常量
::访问常量
所以,::
就是可以用来访问常量的,举个例子
1
2
3
4
5
6
7
class Book
NUM = 100
end
puts Book`::`NUM
100
再测试个例子
1
2
3
4
5
6
7
8
9
10
class Book
def read
200
end
end
book = Book.new
puts book::read.inspect
200
可以看到::
一样可以访问method
,在访问method
的情况下,::和.
可以理解为是一样的效果
因为
method
也是一种对象,也可以被看成是一种常量!扩展一下,那么class
其实也是常量,那::
应该也可以用来访问class
1
2
3
4
5
6
7
class Book
class Note
end
end
puts Book::Note.inspect
Book::Note
没问题,所以::
运算符就可以用来在class
和module
中引用常量,以及class
和module
自身,像上例中是不能用.
运算符来进行Book.Note.inspect
引用的,因为这会被认为是引用methods
而不是常量
::的接收者
如果::
没有显示的接收者,如下例
1
2
3
4
5
6
7
8
9
10
11
12
NUM = 100
class Book
NUM = 200
def self.read
::NUM
end
end
puts Book::NUM
puts Book::read
200
100
可以看到Book::NUM
返回的200
,Book::read
返回的100
,这是因为如果没有显示的接收者,::NUM
实际上等价于默认顶层类Object
作为接收者,所以这里的顶层是class
外面的NUM
小结
::
在各种第三方包以及扩展包中大量存在,因为涉及到各种包的相互调用,理解::
后可以更好的看源代码了
Ruby相关文章
This post is licensed under
CC BY 4.0
by the author.