我想创建正则表达式来匹配ruby符号,但我需要知道符号的确切语法是什么.
到目前为止,我知道以下内容:
:'string'
:"string"
:__underline
:method
:exclamation!
:question?
:@instance
:$global
Run Code Online (Sandbox Code Playgroud)
你所谈论的并不完全清楚.
如果你在谈论Symbol可以包含什么,答案是:任何东西,包括换行符,任意空格,控制字符,任意奇怪和晦涩的Unicode字符,以及其他一切.
如果你在谈论写Symbol文字的各种方法,这是我最好的理解:
:字面:任何有效的Ruby标识符(例如:foo,:Foo,:@foo,:@@foo,:$foo,:$:,...):文字:在单引号String文字中有效的所有内容,包括转义序列,如:'\''和:'\\':文字:一切是有效的双引号String的文字,包括转义序列,如:"\"",:"\\"和:"\n",以及串插,它允许你注入的任意Ruby代码的结果进入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|,等Symbolkey: value语法中的散列键:每个有效的Ruby标签,例如{foo: 42}Symbol引用'key': value语法中的散列键:每个有效的Ruby String文字,包括转义序列和插值,例如{"foo\n#{bar}": 42}当然还有很多其他表达式可以评估为Symbol:
def foo;end # => :fooString#to_sym(别名String#intern):'foo bar'.to_sym # => :'foo bar'return的方法Symbol