在Ruby中,%{}是什么意思?

38
在马特关于黄瓜测试干涸的帖子中,Aslak建议如下。

当我有很多引用时,我更喜欢这个:

假设%{我在“用户名”中输入“#{User.first.username}”}

% {CONTENT} 结构叫什么?有人介意在某些文档中引用它吗?我不确定如何查找它。
还有关于%Q的事情。它是否等同于%?花括号呢?可以使用方括号吗?它们的功能有所不同吗?
最后,#{<ruby stuff to be evaluated>} 结构叫什么?文档中是否有对此的参考?
3个回答

35

其他答案实际上都没有回答这个问题。

这是百分号符号表示法。百分号符号表示下一个字符是一个字面上的分隔符,并且您可以使用任何(非数字/字母)分隔符。例如:

%{stuff}
%[stuff]
%?stuff?

等等。这使您可以在字符串中放置双引号、单引号等,而无需转义:

%{foo='bar with embedded "baz"'}

返回文字字符串:
foo='bar with embedded "baz"'

百分号可以后跟字母修饰符以确定如何插值字符串。例如,%Q[ ] 是一个插值字符串,%q[ ] 是一个非插值字符串,%i[ ]是一组非插值符号等等。因此,例如:

 %i#potato tuna#

返回此符号数组:

[:potato, :tuna]

详情请见:Wikibooks


13

如果其中任何一个解释了 Given %{I enter “#{User.first.username}” in “username”} 中的 %{,我找不到它。%{ 是打字错误还是 Cucumber DSL 的一部分? - Jonas Elfström
3
这句话的意思是,它与双引号字符串等价,但不需要在内部转义双引号(可以参考这个例子:Given "I enter \“#{User.first.username}\” in \“username\”")。 - Michael Kohl
1
很高兴了解到百分号字面量,开头和结尾的字符可以是任何东西。因此 %{一些文本}, %[一些文本] 但也包括 %#一些文本#%'一些文本' 甚至 %%一些文本% - Koen.
编码风格指南通常鼓励使用%(),例如:https://www.relishapp.com/womply/ruby-style-guide/docs/percent-literals - Michael Kohl

12

#{1+1} 被称为字符串插值。详见这里

我和Wikibooks把%符号称作"% 符号"。参考此处。% 符号可以采用任何非字母数字的分隔符,并且可以采用修饰符(有点像正则表达式选项),其中一个修饰符是是否允许 #{} 的字符串插值(默认情况下也启用该功能)。

% 对它做了一些特殊处理,使得它的符号具有某种独特但对初学者来说有点晦涩的简洁性。例如,%w{hello world} 返回数组 ['hello','world']。而 %s{hello} 则返回符号 :hello


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接