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

Mik*_*e S 1 ruby operators

在将此标记为" Ruby中的冒号操作符是什么? " 的副本之前,请先阅读问题(只是先发制人).我不是在询问冒号究竟做了什么.

我最近试图想出一个聪明的解决方案" 将字符串转换为符号/关键字 ".我的第一个想法是为String类重载冒号运算符,就像Ruby +对String上的方法一样(我知道这样做的潜在缺点).但我发现它:不仅仅是String的可重载运算符.

Google对"ruby运算符" 的第一个结果并未将冒号显示为运算符.我找不到任何声称它是运营商的消息来源.我想它会与hashrocket(=>)属于同一类别,但我不知道你会称之为什么.

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

saw*_*awa 5

解析程序分两步进行:

  1. 将字符序列转换为标记序列,和
  2. 将令牌序列转换为句法树.

运算符,简单对象文字,关键字(例如begin)=>都是标记,并在步骤2中处理.标记在Ruby C代码中具有内部名称.

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