Ruby语言的大部分是方法而不是语法,因此我希望找到%q
,%w
等,定义为Kernel
类中的方法。但是,他们不在那里。
那么他们在哪里定义?它们是语言关键词吗?
答案 0 :(得分:30)
Programming Ruby在chapter about strings中提及它们。
与%q{}
和%Q{}
相关的是%{}
,与%Q{}
相同。此外,我显示的分隔符“{}
”可以是一对匹配的分隔符,因此您可以使用[]
,()
等。%q{}
与使用单个分隔符相同-quotes来分隔字符串。 %Q{}
与使用双引号相同,允许插入嵌入字符串:
%q{foobar} # => "foobar"
%Q{foobar} # => "foobar"
asdf = 'bar' # => "bar"
%q{foo#{asdf}} # => "foo\#{asdf}"
%Q{foo#{asdf}} # => "foobar"
此外,还有%w{}
使用空格将字符串拆分为数组。例如:
%w[a b c] # => ["a", "b", "c"]
%w{}
不会插入嵌入变量:
%w[a b asdf] # => ["a", "b", "asdf"]
%w[a b #{asdf}] # => ["a", "b", "\#{asdf}"]
定义正则表达式的%r{}
:
%r{^foo}.class # => Regexp
最后有%x{}
就像反引号一样,即“``”,将字符串传递给底层操作系统。把它想象成“exec”:
%x{date} # => "Fri Nov 26 15:08:44 MST 2010\n"
许多Ruby对这些快捷方式的想法来自Perl,只有在Perl中他们使用q{}
,qq{}
,qw{}
,qx{}
和qr{}
。前导q
代表“引用”,如果我没记错的话,它们会被视为“引用”操作符。 Ruby的文档需要扩展,这组特定的工具肯定可以使用一些帮助。
答案 1 :(得分:25)
它们在解析器中被“硬编码”;见
查找相关代码的最简单方法是查找第二次出现的str_sword
(单引号WORD)。所有“分隔输入”语法都在那里定义:%Q
,%q
,%W
,%w
,%x
,%r
和{{ 1}}(上面引用的两个版本都定义了相同的分隔输入标记集)。
答案 2 :(得分:4)
它们不是关键字,而是宏。很难找到他们的官方参考,但有一个here。
答案 3 :(得分:1)
[本说明是对Will和Tin之间讨论的回应 男人在2012年5月30日关于regexp文字的主题看起来像 Ruby文档中的“%r ... /”。我似乎无法添加评论 直接讨论,但也许是适当的人 privs可以在那里移动这些信息....]
一般的Ruby类文档是根据所讨论的每个类的源代码中的RDoc
注释生成的。这些源注释具有正则表达式文字的正确语法,如查看通过ri Regexp
显示的文本文档,使用本地生成的HTML版本的文档等时可以看到的。
但是,在今年春天的一段时间内,用于生成www.ruby-doc.org上的文档页面的RDoc
版本包含导致regexp
文字显示为{的错误{1}}代替"%r.../"
。但是,截至6月9日,该错误已得到纠正,“核心”和“std-lib”页面被重新生成,因此正则表达式文字在该网站上再次正确显示。
(网站上还有其他类别的文档是单独生成的,但如果这些页面中的任何一个仍显示不正确的格式,它们也应该在最终重建时得到修复。)