【问题标题】:Ruby Block syntaxRuby 块语法
【发布时间】:2016-07-07 02:52:03
【问题描述】:

我正在浏览我在网上找到的一些代码并找到以下内容

def change input 
   ('a'..'z').map { |letter| input.downcase.include?(letter) ? '1' : '0' }.join
end

我了解这段代码在做什么。它将接受一个字符串,检查字符串是否包含字母表中的每个字母,如果为真则返回 1,如果为假则返回 0。

但是我不熟悉这种语法:

?(letter) ? '1' : '0' }

我知道问号通常用于表示该方法将返回布尔结果。但我确信为什么在争论之后会有第二个问号。

另外,我知道如果为真则返回 1,如果为假则返回 0。这就是这个冒号所代表的。如果块中方法的结果是布尔值,是否总是可以使用这样的冒号?

【问题讨论】:

  • condition ? do_this_if_true : do_this_if_false
  • 这实际上会创建一个由 1 和 0 组成的字符串,而不仅仅是 1 或 0 - 只是为了清楚

标签: ruby syntax boolean block


【解决方案1】:

boolean_expression ? option_a : option_b 格式称为三元运算符。简称

if boolean_expression
  option_a
else
  option_b
end

【讨论】:

    【解决方案2】:

    第一个问号是#include? method的一部分

    表达式condition ? if_true : if_false称为三元运算符,是

    的简写
    if condition
      if_true
    else
      if_false
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      相关资源
      最近更新 更多