红宝石座语法

红宝石座语法

问题描述:

我正在经历一些代码,我在网上找到,发现如下红宝石座语法

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

我明白这是什么代码正在做什么。它将采用一个字符串,检查字符串是否包含字母表中的每个字母,如果为true,则返回1,如果为false,则返回0。

但是我不熟悉这个位语法:

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

我知道一个问号通常是用来表明该方法会返回一个布尔结果。但我保证为什么在争论后有第二个问号。

此外,据我所知,这将返回1如果为true,如果为false则返回0。这就是这个冒号代表的。如果块中的方法的结果是布尔值,那么使用这样的冒号总是可以的吗?

+0

'条件速记? do_this_if_true:do_this_if_false' –

+0

这实际上会创建一个1和0的字符串,而不仅仅是1或0 - 只是为了清楚 – nikkypx

格式boolean_expression ? option_a : option_b被称为三元运算符。它是短期的

if boolean_expression 
    option_a 
else 
    option_b 
end 

第一问号是#include? method

的expession condition ? if_true : if_false的部分被称为一个三元运算符,其是用于

if condition 
    if_true 
else 
    if_false 
end