3
下面的代碼工作良好,打印「5.0」如何使用聯盟「if」語句[水晶]
$x : Float64
$y : Float64
$x = 3.0_f64
$y = 2.0_f64
puts $x + $y
現在,我更改代碼以支持「無」。
$x : Float64?
$y : Float64?
$x = 3.0_f64
$y = 2.0_f64
puts $x + $y if !$x.nil? && !$y.nil?
但是,此代碼報告以下錯誤消息。
no overload matches 'Float64#+' with type (Float64 | Nil) Overloads are: - Float64#+(other : Int8) - Float64#+(other : Int16) - Float64#+(other : Int32) - Float64#+(other : Int64) - Float64#+(other : UInt8) - Float64#+(other : UInt16) - Float64#+(other : UInt32) - Float64#+(other : UInt64) - Float64#+(other : Float32) - Float64#+(other : Float64) - Number#+() Couldn't find overloads for these types: - Float64#+(Nil) puts $x + $y if !$x.nil? && !$y.nil?
我想停止方法的調用「#+()」如果$ x或$ y是零 和打印計算結果,如果兩者都Float64。
這種情況的最佳做法是什麼?
在上面的代碼中,我簡化了這個問題的代碼。 在結果中,問題的含義不由自主地改變了。 我想問下面的代碼實際上。
class Xyz
property a, b
@a : Float64?
@b : Float64?
def initialize
@a = nil
@b = nil
end
def do_calc
if [email protected]? && [email protected]?
puts @a + @b
else
puts "We can't calculate because '@a or @b has nil."
end
end
end
x = Xyz.new
x.a = 3.0_f64
x.b = 2.0_f64
x.do_calc
此代碼報告以下錯誤。
instantiating 'Xyz#do_calc()' x.do_calc ^~~~~~~ in ./a.cr:15: no overload matches 'Float64#+' with type (Float64 | Nil) Overloads are: - Float64#+(other : Int8) - Float64#+(other : Int16) - Float64#+(other : Int32) - Float64#+(other : Int64) - Float64#+(other : UInt8) - Float64#+(other : UInt16) - Float64#+(other : UInt32) - Float64#+(other : UInt64) - Float64#+(other : Float32) - Float64#+(other : Float64) - Number#+() Couldn't find overloads for these types: - Float64#+(Nil) puts @a + @b
如何避免此錯誤?
謝謝你的問題。我簡化了這個問題的代碼。 在結果中,問題的含義被不自覺地改變了.. 我添加了我想要問的問題.. – elgoog
我在你指定的鏈接中找到了答案。對不起,重複的問題。 – elgoog