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.