作者SansWord (是你)
看板Ruby
标题Re: [问题] 哪些字可以用作 symbol 名称?
时间Sat Jul 30 14:52:52 2011
※ 引述《bootleq (打架金刚)》之铭言:
: 目前自己观察,分成三类:
: - :foo_bar
: 单纯的 colon 加上一般变数名
: 仅有个疑问是多位元组的字(例如 :foo字bar)是否合法
: - :"string"
: 加了 qoute 里面随便什麽都可以。
: - :operator
: 比较有疑问的是这个,参考 Operator Expressions
: http://phrogz.net/ProgrammingRuby/language.html#operatorexpressions
: 里面最左栏有 Y 的是可以定义成 method,代表是合法的 symbol 吗?
: 有些我直接在 console 下
: s = :<<
: 可以建一个 symbol
: 但有些如 :% 或 :| 又不行
: 应该有标准可循,可是它在哪里啊?
我用 ruby_parser parse 了 :x, :+ 之类的ruby 语句
发现Ruby 把symbol 直接视为一种literal, 而没有function call
所以 :後面可以加什麽是被Ruby文法规范,而不是使用方法。
接着,我去查Ruby 的 BNF grammar
http://www.cse.buffalo.edu/~regan/cse305/RubyBNF.pdf
SYMBOL : :FNAME | :VARNAME
FNAME : IDENTIFIER | .. | "|" | ˆ | & | <=> | == | === | =
| > | >= | < | <= | + | - | * | / | % | **
| << | >> | | +@ | -@ | [] | []=
VARNAME : GLOBAL | @IDENTIFIER | IDENTIFIER
IDENTIFIER : sequence in /[a-zA-Z_]{a-zA-Z0-9_}/.
GLOBAL : $IDENTIFIER | $any_char | $-any_char
大致上是这样。应该可以回答你的问题。
不过有趣的是,依照这个文法, :"abc" 是不合文法的。
我不知道为什麽irb还是可以过。
http://web.njit.edu/all_topics/Prog_Lang_Docs/html/ruby/yacc.html
这篇文法比较好阅读
--
回忆不会消失...只会被盖在灰尘
下...
只要没有风去吹动~~一切....就可以默默淡忘...
所以....不要成为那伤人的风吧.... ^.^
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.45.229.151
※ 编辑: SansWord 来自: 114.45.229.151 (07/30 14:57)
1F:推 bootleq:感谢!正是我需要的 07/30 16:19
2F:推 bootleq::@@y 这种好像也不符规定 07/30 17:31
3F:推 bootleq:在 ruby-lang.org 找到一份比较完整的 07/30 19:11