Where in the Ruby language is %q, %w, etc., defined?
Ruby语言中有很多是方法而不是语法,所以我希望找到%q、%w等,定义为Kernel类中的方法。但是,他们不在那里。
那么它们是在哪里定义的呢?它们是语言关键字吗?
编程Ruby在关于字符串的章节中提到了它们。
与%q{}和%q{}有关的是%{},与%q{}相同。另外,我显示的分隔符"{}可以是一对匹配的分隔符,所以可以使用[]和()等。%q{}与使用单引号分隔字符串相同。%q{}与使用双引号相同,允许插入嵌入字符串:
1 2 3 4 5 6
| %q{foobar} # =>"foobar"
%Q{foobar} # =>"foobar"
asdf = 'bar' # =>"bar"
%q{foo#{asdf}} # =>"foo\#{asdf}"
%Q{foo#{asdf}} # =>"foobar" |
另外,还有%w{},它使用空格将字符串拆分为一个数组。例如:
1
| %w[a b c] # => ["a","b","c"] |
%w{}不插入嵌入变量:
1 2
| %w[a b asdf] # => ["a","b","asdf"]
%w[a b #{asdf}] # => ["a","b","\#{asdf}"] |
以及定义正则表达式的%r{}:
1
| %r{^foo}.class # => Regexp |
最后是%x{},它的作用类似于倒计时,即"``",将字符串传递给底层操作系统。把它想象成"执行官":
1 2
| %x{date} # =>"Fri Nov 26 15:08:44 MST 2010
" |
Ruby对这些快捷方式的很多想法都来自Perl,只有在Perl中,他们才使用q{}、qq{}、qw{}、qx{}和qr{}。领先的q代表"Quote",如果我记得对的话,它们被视为"Quote"操作符并记录在案。Ruby的文档需要扩展,这组特定的工具肯定会用到一些帮助。
- 一个修正%相当于%q而不是%q。因此您可以使用%(文本一些变量)
- 对的。抓得好。我可能是胖手指拨动了换档键。我来补一下。
- Ruby文档在没有匹配分隔符的示例中使用了%r。例如,在类字符串中,您可以看到:a.scan(%r\w+/) 。它似乎有一个结束符'/'。我找不到任何记录这种用法的地方。
- @Williamsmith,这是文档中的一个印刷错误,它不是一个可接受的语法示例。尝试在IRB中使用%r,它会一直吞吃,直到您键入终止\w。把它放到脚本中,Ruby会抱怨"unterminated regexp meets end of file"或类似的东西。您将在regexp文档中看到相同的错误,但是尝试它们的示例,您将看到这些示例是错误的。
- 啊。当然。在线Ruby文档中有很多拼写错误。但是当我学习语言的时候,医生是我的圣经。尽管我现在拥有弗拉纳根和马茨最新出版的"Ruby编程语言",这是一个非常好的书面和干净的语言规范,强烈推荐。
- 另一个修正:它不只是任何匹配的字符对。%这也是一个字符串。几乎任何字符都可以工作,字符串将一直运行,直到重复该字符(未转义)。字母和数字似乎不起作用。
它们在解析器中是"硬编码的";请参见
- 从Ruby1.9.2的尖端解析.y,或者
- 从Ruby1.8.7的尖端解析.y。
找到有问题的代码的最简单方法是查找第二次出现的str_sword(单引号)。这里定义了所有"定界输入"语法:%Q、%Q、%W、%W、%x、%r和%s(上述两个版本定义了相同的定界输入标记集)。
- 克里斯-非常感谢,这正是我要找的信息。-基思
- 链接不起作用。
- @是的:链接对我仍然有效。也许服务器在您尝试它们时状态不好。
- 链接非常慢。您可以更快地在Github上查看源代码:github.com/ruby/ruby/blob/trunk/parse.y_l7505-l7554
它们不是关键字,而是宏。很难找到他们的官方参考资料,但这里有一个。
[This note is in response to the discussion between Will and the Tin
Man on May 30, 2012 on the topic of regexp literals looking like
"%r.../" in the Ruby docs. I don't seem to be able to add a comment
directly to that discussion, but perhaps someone with appropriate
privs can move this info over there....]
一般的Ruby类文档是从RDoc注释生成的,这些注释内置于每个相关类的源代码中。这些源注释对于正则表达式文本具有正确的语法,正如在查看通过ri Regexp显示的文本文档时所看到的,使用本地生成的文档HTML版本等。
然而,在今年春天的一段时间里,用于在www.ruby-doc.org上生成文档页面的RDoc版本包含了一个错误,导致regexp文本显示为"%r.../",而不是"/.../"。不过,截至6月9日,该错误已被纠正,"core"和"std lib"页面已重新生成,因此regexp文本再次正确显示在该站点上。
(网站上还有其他类别的文档是单独生成的,但是如果这些页面中的任何一页仍然显示不正确的格式,那么在最终重建时,它们也应该得到修复。)