单目问号(?)运算符是什么作用?

34

我在HAML代码中看到了这个操作符,想知道它是用来做什么的。

我发现以下内容是有效的:

> ?{
=> "{" 
> ?\s
=> " " 
> ?a
=> "a" 

而这个不起作用:

> ?ab
SyntaxError: (irb):4: syntax error, unexpected '?'

所以我想它需要一个字符作为参数,并返回一个包含该字符的字符串。

问题:

  1. 这个操作符是用来做什么的?
  2. 应该在什么时候使用它?
  3. 如果它只是创建一个单字符字符串,那为什么要将其包含在语言中呢?它不会破坏语言正交性吗?它有什么好处?

1
Ruby中的“语言正交性”?真的吗? - mu is too short
@muistooshort 嗯,至少一切都是类和方法。确实它有一些异常(主要来自Perl)。 - fotanus
4个回答

30

它返回一个单个字符的字符串。这是编写单个字符字符串文字的最短方式。当您想要定义许多单个字符字符串时,请使用此功能。它是Ruby <1.9遗留下来的,那时它用于返回该字符的ASCII代码。我不明白您所说的“打破语言正交性”的意思。


谢谢sawa,你可以在这里阅读有关正交性的内容:en.wikipedia.org/wiki/Orthogonality_(programming) - 不知道为什么无法使用markdown链接。 - fotanus
1
但是字符字面量如何破坏正交性,而数组字面量、映射字面量、字符串字面量、lambda字面量、整数字面量、符号字面量、浮点字面量等却不会呢? - Jörg W Mittag

13

这不是运算符,而是字符字面量。但是在Ruby中没有字符类型,因此,字符字面量不会产生字符类型的实例,而是会评估为“字符的默认表示”。在Ruby 1.9+中,它是长度为1的String,在Ruby 1.8中,它是Fixnum,表示字符的Unicode码点。


1
你有“字符的默认表示”这句话的来源吗? - Chris Bloom

2

关于#2,我发现它在传达我正在设置的参数或我正在测试的值是一个单个字符而不仅仅是一个简短的字符串时非常有用。这是一个微妙的可读性/文档问题,但值得考虑以供以后的维护者(包括我自己)参考。


-3

在 Ruby 方法中的“?”标记表示该方法将返回 true 或 false。

通过检查方法名称,我们可以确定该方法将返回布尔值。

例如:

empty? - 此方法将检查对象是否为空。根据此,它将返回 true 或 false。

用法:

[1,2,3].empty? - 返回 false

[].empty? - 返回 true


这条评论与原问题毫无关联,且原问题已经写得很清楚了。 - Iván Cortés

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