我正在嘗試解決這個任務:
創建一個 proc 來檢查給定的元素陣列是否為 nil。用于
.nil?評估元素。如果元素是,則列印'true',如果nil元素有值,則列印'false'?
這是我的嘗試:
def check_nill(array1)
p = Proc.new {|x| x.nil?}
res= p.call(array1)
if res == true
return "true"
else
return "false"
end
end
array1=[{},nil,[]]
result=check_nill(array1)
puts "#{result}"
實際上,這里的輸出應該是“真”。但是這段代碼給出了“假”作為輸出。誰能告訴我,是什么原因?
uj5u.com熱心網友回復:
您的方法當前檢查給定物件是否為nil:
check_nill(nil) #=> "true"
check_nill([]) #=> "false"
check_nill(123) #=> "false"
請注意,這個物件可以是任何東西,所以你的引數名稱array1在某種程度上會誤導這個用例。(您可能還想將方法重命名為check_nil,即使用 one l)
實際上,輸出應該是“真” [...]
我假設您實際上想要檢查陣列的任何元素是否滿足條件,即陣列是否包含 nil. 您可以any?為此使用塊。從塊內,您可以呼叫您的程序:
prc = Proc.new { |x| x.nil? }
[{}, nil, []].any? { |element| prc.call(element) }
#=> true
可以通過將 proc 轉換為 block來縮短:
prc = Proc.new { |x| x.nil? }
[{}, nil, []].any?(&prc)
#=> true
您甚至可以擺脫自定義 proc 并Symbol#to_proc改用:
[{}, nil, []].any?(&:nil?)
#=> true
還有all?一個檢查是否所有元素都滿足條件,例如:
[{}, nil, []].all?(&:nil?)
#=> false
[nil, nil, nil].all?(&:nil?)
#=> true
uj5u.com熱心網友回復:
如果我正確理解了這個問題,您正在嘗試檢查所有陣列元素是否為 nil/blank/false。如果陣列中存在任何非零值,則要回傳 true,否則回傳 false。以下是如何確定這一點:
array1 = [{}, nil, []]
array1.all?(&:blank?) # this returns true
array2 = [{}, nil, [], 1]
array1.all?(&:blank?) # this returns false
uj5u.com熱心網友回復:
[nil,nil,nil].all? nil沒有程序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/478569.html
上一篇:在Ruby中將正數更改為負數?
