После кода работает хорошо и печати «5.0»Как использовать объединение в «если» заявление [Кристалл]
$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?
Я хотел бы, чтобы остановить вызов метода «# +()», если $ х или $ у равна нулю и распечатать вычисленный результат, если оба 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