a
此方法應回傳和b
(未排序)之間的所有數字的總和,如果它們相等,則應回傳a
或。b
def get_sum(a,b)
a < b ? (a..b).sum : (b..a).sum
end
我很好奇為什么這個方法在a
和b
相等時不回傳 nil 。三元運算子負責a
小于或大于的條件,b
因此我很想return a if a==b
在三元之前添加以測驗它們是否相等,但似乎沒有必要。
例如, ifa=5
和b=5
then 回傳的值為5
. 有人可以解釋為什么會這樣嗎?
uj5u.com熱心網友回復:
這就是<
運算子(或更確切地說是方法)的作業方式。
a < b
true
如果a
小于則回傳b
,否則回傳false
。
因此5 < 5
回傳false
。
通過撰寫a..b
,您創建了一個Range
物件Range.new(a, b)
,該物件從 開始a
并上升到b
. 之后你呼叫sum
這個物件的方法。
由于范圍5..5
從5
to 和包括5
,當您將其轉換為陣列時,您會得到:
(5..5).to_a #=> [5]
該sum
方法將所有在此范圍內的數字相加。并且由于該范圍包括單個數字5
,因此該操作的結果是5
。
(5..5).sum #=> 5
你的方法可以寫得更簡潔
def get_sum(a, b)
(a < b ? a..b : b..a).sum
end
要使其0
在a
和b
相同時回傳,您可以使用具有三個點的獨占...
范圍。
def get_sum(a, b)
(a < b ? a...b : b...a).sum
end
get_sum(5, 5) #=> 0
get_sum(5, 6) #=> 5
get_sum(5, 7) #=> 11
uj5u.com熱心網友回復:
實際上沒有Range#sum
,因為它是繼承自Enumerable#sum
所以(5..5).sum
它是一樣的(5..5).to_a.sum
(5..5).to_a # => [5]
這就是原因
要修復它,您可以執行以下操作(else
將三元運算子的分支更改為elsif
)
def get_sum(a, b)
if a < b
(a..b).sum
elsif a > b
(b..a).sum
end
end
get_sum(1, 2) # => 3
get_sum(2, 1) # => 3
get_sum(5, 5) # => nil
但在我看來get_sum(5, 5) == 5
比nil
uj5u.com熱心網友回復:
三元運算子只有兩個分支。如果條件不真實,則執行后者。沒有不執行分支的情況(除非發生一些錯誤,但這是另一種情況)。
只有當你只有一個分支并且沒有執行時,你才會得到 nil 。例如
def get_sum(a,b)
if a < b
(a..b).sum
end
end
為此get_sum(5, 5)
評估為nil
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/508359.html