Ruby'的用例是什么;s%q/%q报价方法?
我一直在阅读Thomas的Ruby 1.9编程,发现了可选的分隔单引号和双引号方法(Ruby'的用例是什么;s%q/%q报价方法?,ruby,string,quotes,Ruby,String,Quotes,我一直在阅读Thomas的Ruby 1.9编程,发现了可选的分隔单引号和双引号方法(%q/%q)。我也从其他Ruby语言参考中了解到了它们 %q/I'm acting like a single-quoted string/ %Q|"I'm acting like a double-quoted string" --Anonymous| 我使用Ruby的时间不长,但我从未在生产代码中遇到过这种引用方法 除了明显能够避免使用反斜杠在内部转义引号之外,这种引用常规单引号或双引号的方法有哪些常见用
%q/%q
)。我也从其他Ruby语言参考中了解到了它们
%q/I'm acting like a single-quoted string/
%Q|"I'm acting like a double-quoted string" --Anonymous|
我使用Ruby的时间不长,但我从未在生产代码中遇到过这种引用方法
除了明显能够避免使用反斜杠在内部转义引号之外,这种引用常规单引号或双引号的方法有哪些常见用例?它们通常用于单行字符串还是多行字符串?如果在多行字符串中使用,它们是否比herdoc字符串更受欢迎?有一种常见的Ruby习惯用法吗?它们对于使用JavaScript转义HTML非常有用,因为您已经“用完”了引用方法:
link = %q[<a href="javascript:method('call')">link</a>]
这样做的好处是,您不需要注意查询中使用的引用类型。它将与单、双或两者一起工作。他们也比HEREDOC风格的方法少了很多麻烦
Ruby还提供了其他类似这样的方便方法,比如可以构造正则表达式的
%r
。当试图编写一个处理像http://
这样必须转义的内容时,这避免了斜杠。当字符串包含单引号或双引号时,斜杠非常有用。这种情况并不经常发生,但这种技术在发生时非常有用。Overview
除了“避免内部转义引号”和@tadman之前提供的示例之外,还有其他用例:
- 使用与生成器本身相同的语言自动生成代码(例如,Ruby生成Ruby)
- 提供格式清晰的代码,不会混淆文本编辑器的语法突出显示功能
- 允许存储可能必须通过多个存储层的代码块(例如与网站交互的数据库,或与文本编辑器交互的代码段管理系统,后者与子shell交互,等等)
]也许值得注意的是,bundler和jeweller在生成gempec时默认使用%q作为gempec的摘要/描述部分。这可以防止某人在摘要或描述中使用引号并破坏gemspec。我知道这是一个旧线程,但我在生产中调用命令并希望插入一些值时使用了它们,如:
system(%Q(ffmpeg -y -i "#{input_filepath}" -qscale:a 2 "#{output_filepath}"))
超级方便。我认为这就是用例。我只对多行字符串使用herdocs。herdocs有一个很大的优势,就是你可以将简介放在一个代码链中,这样它就不会在使用它的地方打断代码行,比如在
str=//我已经很久没有使用Ruby了,但是我从未在生产代码中遇到过这种引用方法。//这个Ruby语言特性可以追溯到perl。因此,您很可能会在Rubyists中发现这一点,这些Rubyists也是当前或以前的perl开发人员。要找到几个示例,请搜索“Perl quotelike操作符”。op说他想知道的不是“避免内部转义引号”。我没有考虑的JavaScript示例-内部引号的功能在语法上有重要意义,并且会混淆哪个上下文(标记属性、JS字符串或整个外部字符串)当前正在被引用和转义。当声明变量时,HEREDOC样式是可以的,但当用作方法的参数时,它非常难看,特别是当您试图将其中两个作为不同的参数提供时。对于未初始化的人来说,它们非常容易混淆。
system(%Q(ffmpeg -y -i "#{input_filepath}" -qscale:a 2 "#{output_filepath}"))