【问题标题】:What does the unary question mark (?) operator do?一元问号 (?) 运算符有什么作用?
【发布时间】:2013-05-14 12:29:13
【问题描述】:

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

我看到以下作品:

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

这不起作用:

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

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

问题:

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

【问题讨论】:

  • Ruby 中的 语言正交性?真的吗?
  • @muistooshort 好吧,至少一切都是类和方法。确实它有其偏差(主要来自 perl)

标签: ruby operators


【解决方案1】:

它返回单个字符串。这是编写单字符串文字的最短方法。当你想定义很多单字符串时使用它。它是 Ruby

【讨论】:

  • 谢谢sawa,您可以在此处阅读有关正交性的信息:en.wikipedia.org/wiki/Orthogonality_(programming) - 由于某种奇怪的原因无法与它建立降价链接。
  • 但是字符字面量如何打破正交性,而数组字面量、映射字面量、字符串字面量、lambda 字面量、整数字面量、符号字面量、浮点字面量等不会?
【解决方案2】:

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

【讨论】:

  • 你有“字符的默认表示”引用的来源吗?
【解决方案3】:

关于#2,我发现它有用的地方是传达我正在设置的参数或我正在测试的值旨在成为单个字符,而不仅仅是这恰好是一个简短的字符细绳。这是一个微妙的可读性/文档问题,但值得后来的维护者(包括我自己)考虑。

【讨论】:

    【解决方案4】:

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

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

    例子:

    空的? - 此方法将检查对象是否为空。取决于它会返回真或假。

    用途:

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

    [].empty? - 返回真

    【讨论】:

      猜你喜欢
      • 2010-10-18
      • 2010-09-14
      • 2011-01-24
      • 2010-09-08
      相关资源
      最近更新 更多