什么是分类为Ruby的冒号?它不是运营商

时间:2015-08-20 18:18:05

标签: ruby operators

在将此标记为" What is the colon operator in Ruby?"的副本之前,请阅读问题(仅限抢占式问题)。我不是在询问冒号实际上做了什么。

我最近试图为" Convert string to symbol/keyword"提出一个聪明的解决方案。我的第一个想法是为String类重载冒号运算符,就像Ruby对String上的+方法所做的那样(我意识到这样做的潜在缺点)。但我发现:不仅仅是String的可重载运算符。

" ruby​​运算符的first result on Google"不会将冒号显示为运算符。我无法找到声称是运营商的任何来源。我想它会与hashrocket(=>)属于同一类别,但我不知道你会称之为什么。

那么这个特殊的冒号字符被归类为什么?你可以在Ruby源代码中指出它可能被改变的定义吗?

1 个答案:

答案 0 :(得分:5)

解析程序分两步进行:

  1. 将字符序列转换为标记序列,
  2. 将令牌序列转换为句法树。
  3. 运算符,简单对象文字,关键字(例如begin),=>都是标记,并在步骤2中处理。标记在Ruby C代码中具有内部名称。

    但是,作为方法中的命名参数或散列中的符号键的一部分的冒号在步骤1中处理,并且不是令牌;它没有特定的名称。