Допустим, я хочу, чтобы мой метод принимал все, что является «числом как», т.е. знает, как свести к минимуму, сложить, вычесть, умножить и разделить. Он должен делать это с собой и с номерами (Int32 и Float64 для моих целей)
abstract struct Numberlike
alias Num = (Int32 | Float64)
abstract def -
abstract def +(other : self)
abstract def +(other : Num)
abstract def -(other : self)
abstract def -(other : Num)
abstract def *(other : self)
abstract def *(other : Num)
abstract def /(other : self)
abstract def /(other : Num)
end
У меня проблема с тем, что моя дочерняя структура, кажется, должна работать со всеми Numberlike
, а не только с собой. Например
struct Term
alias Num = (Int32 | Float64)
getter coeff : Num
getter sym : Symbol
def initialize(@coeff, @sym); end
def -(other : self)
self.class.new(coeff - other.coeff, sym)
end
end
Выше может вернуться
abstract `def Numberlike#-(other : self)` must be implemented by Term
потому что компилятор интерпретирует мое требование как «быть уверенным, что все числа схожи могут работать со всеми другими числами схожими», но я хочу найти способ сказать: «быть уверенным, что все термины могут работать и с числами и терминами (self)».