2016-07-07 123 views
0

我正在經歷一些代碼,我在網上找到,發現如下紅寶石座語法

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

回答

1

格式boolean_expression ? option_a : option_b被稱爲三元運算符。它是短期的

if boolean_expression 
    option_a 
else 
    option_b 
end 
0

第一問號是#include? method

的expession condition ? if_true : if_false的部分被稱爲一個三元運算符,其是用於

if condition 
    if_true 
else 
    if_false 
end