#methods #julia #custom-type
#методы #Джулия #пользовательский тип
Вопрос:
Прошу прощения, если на этот вопрос уже был дан ответ, я не нашел прямого ответа на этот вопрос в результатах поиска.
Я просматриваю «Learn Julia The Hardway» и не могу найти, в чем разница в моем коде по сравнению с примером в книге. Всякий раз, когда я его запускаю, я получаю следующую ошибку:
TypeError: in Type{...} expression, expected UnionAll, got a value of type typeof( )
Вот код:
struct LSD
pounds::Int
shillings::Int
pence::Int
function LSD(l,s,d)
if l<0 || s<0 || d<0
error("No negative numbers please, we're british")
end
if d>12 error("That's too many pence") end
if s>20 error("That's too many shillings") end
new(l,s,d)
end
end
import Base.
function {LSD}(a::LSD, b::LSD)
pence_s = a.pence b.pence
shillings_s = a.shillings b.shillings
pounds_s = a.pounds b.pounds
pences_subtotal = pence_s shillings_s*12 pounds_s*240
(pounds, balance) = divrem(pences_subtotal,240)
(shillings, pence) = divrem(balance,12)
LSD(pounds, shillings, pence)
end
Еще один быстрый вопрос, я еще не добрался до главы «функции», но мое внимание привлекает то, что в конце функций нет «возврата», я предполагаю, что если не указано, что функция вернет последнее оцененное значение, я прав?
Ответ №1:
Похоже, что здесь используется очень старый синтаксис Julia (я думаю, из версии 0.6). Я думаю, вы просто хотите function (a::LSD, b::LSD)
Комментарии:
1. Спасибо, Оскар, ты прав. Извините, я пока не могу проголосовать. Я думаю, это одно из предостережений при принятии молодого языка, такого как Julia. Тем не менее, я в восторге от этого!
2. Добро пожаловать в сообщество!. Julia 1.0 была выпущена в августе 2018 года, поэтому я бы порекомендовал попробовать использовать что-то новее. Все, начиная с версии 1.0 или новее, должно отлично работать в текущих версиях.
3. Я не думаю, что это было бы правильно, даже до версии 0.6. Он используется
LSD
как параметр типа, а не как тип, поэтому это никогда не было бы правильным.