ruby符号(语法)包含什么?

时间:2015-05-29 10:04:36

标签: ruby symbols

我想创建正则表达式来匹配ruby符号,但我需要知道符号的确切语法是什么。

到目前为止,我知道以下内容:

:'string'
:"string"
:__underline
:method
:exclamation!
:question?
:@instance
:$global

2 个答案:

答案 0 :(得分:5)

你所说的还不完全清楚。

如果你在讨论Symbol可以包含什么,答案是:任何东西,包括换行符,任意空格,控制字符,任意奇怪和晦涩的Unicode字符,以及其他所有内容。

如果您正在谈论撰写Symbol文字的各种方法,请以下是我最好的理解:

  • :字面值:任何有效的Ruby标识符(例如:foo:Foo:@foo:@@foo:$foo,{{1 },...)
  • 单引号:$:字面值:在单引号:字面值中有效的所有内容,包括转义序列,例如String:'\''
  • 双引号:'\\'字面值:在双引号:字面值中有效的所有内容,包括转义序列,例如String:"\""和{{1} },以及字符串插值,它允许您将任意Ruby代码的结果注入:"\\",例如:"\n"
  • Symbol:"#{if rand < 0.5 then RUBY_VERSION else ENV['HOME'] end}"字面的单引号Array:在单引号Symbol Array字面值中有效的所有内容,例如String(相当于%i|foo bar baz|),[:foo, :bar, :baz](相当于%i(foo\ bar baz)),[:'foo bar', :baz](相当于%i:foo bar:
  • [:foo, :bar]Array字面值的双引号Symbol:在双引号Array String字面值中有效的所有内容,例如%I|foo #{bar} baz|等等。
  • {li> Symbol key: value语法中的哈希键:每个有效的Ruby标签,例如: {foo: 42} 引用Symbol语法中的
  • 'key': value哈希键:每个有效的Ruby String文字,包括转义序列和插值,例如{"foo\n#{bar}": 42}

当然有许多其他表达式评估为Symbol s:

  • 方法定义表达式:def foo;end # => :foo
  • String#to_sym(别名String#intern):'foo bar'.to_sym # => :'foo bar'
  • 确实,任何方法return Symbol

答案 1 :(得分:2)

http://www.cse.buffalo.edu/~regan/cse305/RubyBNF.pdf枚举定义Ruby语法的无上下文语法产生。 CFG本质上比RE更强大,所以你可能想为这个工作考虑一个不同的工具 - 但是你当然可以查看这个文档并尝试构建一个匹配所有情况的正则表达式。