ruby 符号(语法)可以包含什么?
What can a ruby symbol (syntax) contain?
我想创建正则表达式来匹配 ruby 个符号,但我需要知道符号的确切语法是什么。
到目前为止,我知道以下内容:
:'string'
:"string"
:__underline
:method
:exclamation!
:question?
:@instance
:$global
http://www.cse.buffalo.edu/~regan/cse305/RubyBNF.pdf 枚举定义 Ruby 语法的上下文无关文法产生式。 CFG 本质上比 RE 更强大,因此您可能想考虑使用不同的工具来完成这项工作——但您当然可以查看此文档并尝试构建匹配所有情况的正则表达式。
你说的不是很清楚。
如果你在谈论 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
of Symbol
s 文字:在 String
s 文字的单引号 Array
中有效的所有内容,例如%i|foo bar baz|
(相当于[:foo, :bar, :baz]
),%i(foo\ bar baz)
(相当于[:'foo bar', :baz]
),%i:foo bar:
(相当于[:foo, :bar]
)
- double-quoted
Array
of Symbol
s literal:在双引号 Array
of String
s literal 中有效的所有内容,例如%I|foo #{bar} baz|
,等等
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
我想创建正则表达式来匹配 ruby 个符号,但我需要知道符号的确切语法是什么。
到目前为止,我知道以下内容:
:'string'
:"string"
:__underline
:method
:exclamation!
:question?
:@instance
:$global
http://www.cse.buffalo.edu/~regan/cse305/RubyBNF.pdf 枚举定义 Ruby 语法的上下文无关文法产生式。 CFG 本质上比 RE 更强大,因此您可能想考虑使用不同的工具来完成这项工作——但您当然可以查看此文档并尝试构建匹配所有情况的正则表达式。
你说的不是很清楚。
如果你在谈论 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
ofSymbol
s 文字:在String
s 文字的单引号Array
中有效的所有内容,例如%i|foo bar baz|
(相当于[:foo, :bar, :baz]
),%i(foo\ bar baz)
(相当于[:'foo bar', :baz]
),%i:foo bar:
(相当于[:foo, :bar]
) - double-quoted
Array
ofSymbol
s literal:在双引号Array
ofString
s literal 中有效的所有内容,例如%I|foo #{bar} baz|
,等等 Symbol
key: value
语法中的散列键:每个有效的 Ruby 标签,例如{foo: 42}
Symbol
引用的'key': value
语法中的散列键:每个有效的 RubyString
文字,包括转义序列和插值,例如{"foo\n#{bar}": 42}
当然还有很多其他表达式的计算结果为 Symbol
s:
- 方法定义表达式:
def foo;end # => :foo
String#to_sym
(别名String#intern
):'foo bar'.to_sym # => :'foo bar'
- 真的,任何方法可能
return
一个Symbol