一元问号(?)运算符有什么作用?

我在HAML代码中看到了这个运算符。 我想知道它是什么。

我看到以下作品:

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

这不起作用:

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

所以我认为它需要一个字符作为参数并返回一个带有该字符的字符串。

问题:

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

它返回一个字符串。 这是编写单字符字符串文字的最短方法。 当您想要定义大量单字符字符串时使用它。 它是Ruby <1.9的遗产,用于返回该字符的ASCII代码。 我不明白你的意思是“打破语言正交”。

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

Re#2,我发现它有用的地方在于传达我正在设置的参数或我正在测试的值是单个字符而不仅仅是这恰好是一个短字符串。 这是一个微妙的可读性/文档化的东西,但值得考虑以后的维护者(包括我自己)。