
無為的程式設計
|
175
(ONE..HUNDRED).map do |n|
if (n % FIFTEEN).zero?
'FizzBuzz'
elsif (n % THREE).zero?
'Fizz'
elsif (n % FIVE).zero?
'Buzz'
else
n.to_s
end
end
一如先前的承諾,為了讓程式碼更清楚,我們正在編寫
ONE
(而非
-> p {
-> x {p [x]}}
及其他)。
不幸的是,這個程式再也無法運作了,因為我們現在用在以 proc 為基礎的數值實作物上的
是像
..
和
%
的運算。因為 Ruby 不知道如何將它們視為數值,結果就只是掛點:
TypeError:
can't iterate from Proc
(譯註:型別錯誤,因為 Proc 無法反覆)、
NoMethodError:
undefined method '%' for #<Proc (lambda)>
(譯註:方法錯誤,因為未定義)…等。我們
需要以這些表示方式換掉所有的運算才能正常運作,而且只能使用 proc 來完成。
在我們可以重新實作任何運算之前,我們需要
true
和
false
的實作物。
布林值
只使用 proc 要如何表示布林值?我們會在條件陳述式使用單獨存在的布林值,而條件
通常是指『如果有一些布林值,就這麼做,不然就那樣做』:
>> success = true
=> true
>> if success then 'happy' else 'sad' end
=> "happy"