Elixir 用布林型別來表示 true 和 false 這兩種值。它只有兩個值:true和false。這些值可以綁定到變數:
true_variable = true
false_variable = false
我們可以透過 and/2、or/2 和 not/1 運算子來求值嚴格的布林運算式。
true_variable = true and true
false_variable = true and false
true_variable = false or true
false_variable = false or false
true_variable = not false
false_variable = not true
撰寫回傳布林值的函式時,慣例上會讓函式名稱以 ? 結尾。同樣的慣例也適用於儲存布林值的變數。
def either_true?(a?, b?) do
a? or b?
end
在這道練習中,你需要把經典遊戲 Pac-Man 的幾條規則翻譯成 Elixir 函式。
你要翻譯的規則有四條,全都和遊戲狀態有關。
別擔心引數是怎麼來的,只要專心把這些引數組合起來,回傳預期的結果就好。
定義Rules.eat_ghost?/2函式,它接受兩個引數(Pac-Man 是否有能量球正在生效 和 Pac-Man 是否碰到幽靈),並回傳 Pac-Man 能否吃到幽靈的布林值。只有在 Pac-Man 有能量球正在生效且碰到幽靈時,這個函式才應該回傳 true。
Rules.eat_ghost?(false, true)
# => false
定義Rules.score?/2函式,它接受兩個引數(Pac-Man 是否碰到能量球 和 Pac-Man 是否碰到豆子),並回傳 Pac-Man 是否得分的布林值。只要 Pac-Man 碰到能量球或豆子,這個函式就應該回傳 true。
Rules.score?(true, true)
# => true
定義Rules.lose?/2函式,它接受兩個引數(Pac-Man 是否有能量球正在生效 和 Pac-Man 是否碰到幽靈),並回傳 Pac-Man 是否輸了的布林值。如果 Pac-Man 碰到幽靈,而且沒有能量球正在生效,這個函式就應該回傳 true。
Rules.lose?(false, true)
# => true
定義Rules.win?/3函式,它接受三個引數(Pac-Man 是否已經吃掉所有豆子、Pac-Man 是否有能量球正在生效 和 Pac-Man 是否碰到幽靈),並回傳 Pac-Man 是否獲勝的布林值。如果 Pac-Man 已經吃掉所有豆子,而且根據第 3 部分定義的引數判斷並沒有輸,這個函式就應該回傳 true。
Rules.win?(false, true, false)
# => false