我不明白[]是ruby中的操作符。我想知道,如果[]
是一个算子,那么括号{} & ()
是什么。这些也是算符吗?
我所知道的是,语言解析器使用这些符号来解释/编译代码。
这取决于你是在谈论数组字面量还是那些用于从数组或哈希中获取或分配值的括号。
作为字面量,[]
只是一个数组字面量,是Array.new
的简写。您还询问了{}
,这是一个散列文字,即Hash.new
的简写。括号是而不是字面量(或者说是'操作符')——它们是用来分组的。
作为一个获取或赋值的"操作符",正如其他人在评论中指出的那样,[]
与其他"操作符"没有特殊或概念上的不同。
同理,写2 + 3
是写2.+(3)
的糖,写array[0]
是写array.[](0)
的糖。
这样做的原因是数组有一个叫做[]
的方法。您可以通过获取数组上的所有方法来找到它:
[].methods
# => long array including :[] (and also :[]=, by the way, for assignments)
注意[].methods
中的括号是数组字面量,不是和'操作符'。
我没有看过任何Ruby解释器的实现,但我猜他们看到了类似array[0]
的东西,并将其转换为array.[](0)
(或者至少他们是这样对待它的)。这就是为什么这种糖语法的工作原理,看起来像'操作符',即使它的底层都是方法。