红宝石座语法
问题描述:
我正在经历一些代码,我在网上找到,发现如下红宝石座语法
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。这就是这个冒号代表的。如果块中的方法的结果是布尔值,那么使用这样的冒号总是可以的吗?
答
格式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
'条件速记? do_this_if_true:do_this_if_false' –
这实际上会创建一个1和0的字符串,而不仅仅是1或0 - 只是为了清楚 – nikkypx