ruby符号(语法)可以包含什么?
我想创建正则表达式来匹配ruby符号,但我需要知道符号的确切语法是什么 到目前为止,我知道以下几点:ruby符号(语法)可以包含什么?,ruby,symbols,Ruby,Symbols,我想创建正则表达式来匹配ruby符号,但我需要知道符号的确切语法是什么 到目前为止,我知道以下几点: :'string' :"string" :__underline :method :exclamation! :question? :@instance :$global 枚举定义Ruby语法的上下文无关语法产品。CFGS本质上比RES更强大,所以您可能需要考虑一个不同的工具来完成这项工作,但是您可以查看该文档并尝试构建与所有情况匹配的REGEXP。 < P>,您所谈论的内容还不完全清楚。 如
:'string'
:"string"
:__underline
:method
:exclamation!
:question?
:@instance
:$global
枚举定义Ruby语法的上下文无关语法产品。CFGS本质上比RES更强大,所以您可能需要考虑一个不同的工具来完成这项工作,但是您可以查看该文档并尝试构建与所有情况匹配的REGEXP。 < P>,您所谈论的内容还不完全清楚。 如果您谈论的是
符号
可以包含的内容,那么答案是:任何东西,包括换行符、任意空格、控制字符、任意怪异和模糊的Unicode字符,以及其他所有东西
如果您正在谈论书写Symbol
文字的各种方式,以下是我的最佳理解:
- 裸
文本:任何有效的Ruby标识符(例如:
,:foo
,:foo
,:@foo
,:@@foo
,:$foo
,…):$:
- 单引号
literal:单引号:
字符串中有效的所有内容,包括转义序列,如
和:'\''
:'\'
- 双引号
文本:双引号:
字符串中有效的所有内容,包括转义序列,如
,:“\”
,和:“\”
,以及字符串插值,它允许您将任意Ruby代码的结果注入到:“\n“
符号中,例如
:”#{如果rand<0.5,则Ruby版本else ENV['HOME']end}”
- 单引号
的数组
的文字:在符号
的单引号字符串
中有效的所有内容,例如数组
(相当于%i | foo bar baz |
),[:foo,:bar,:baz]
(相当于%i(foo\bar baz)
),[:'foo bar',:baz]
(相当于%i:foo-bar:
)[:foo,:bar]
- 双引号
of数组
s文字:在双引号符号
of数组
文字中有效的所有内容,例如字符串
等%I | foo{bar}baz
key:value中的散列键语法:每个有效的Ruby标签,例如Symbol
{foo:42}
引用的Symbol
语法:每个有效的Ruby'key'中的散列键:value
文本,包括转义序列和插值,例如字符串
{foo\n#{bar}:42}
Symbol
s:
- 方法定义表达式:
def foo;结束#=>:foo
(别名String#to#sym
):String#intern
“foo bar”。to#sym=>:“foo bar”
- 实际上,任何可能
返回
符号的方法
:“any string”
,那么字符串中有效的任何内容都肯定在符号中有效。我这样做是为了模板引擎。:D,:-)和:-/也是符号。@Vitalielenhaupt有趣的事实:因为Ruby将几乎所有的unicode字符都视为符号的有效部分,:正是我想要的!非常感谢你。我正在为一个模板系统创建我自己的解析器,所以我现在可以正确地集成嵌入式ruby。非常透彻的解释。非常感谢你!我认为你的回答是正确的,因为我知道你在这方面做了很多工作,而且你最好地回答了我的问题。