Я хотел бы начать, что мне не удалось воссоздать свою проблему в урезанной версии кода. Приведенный ниже код работает так, как предполагалось, поэтому этот пост, возможно, не очень позитивен. Расширенный код, который слишком длинный для публикации здесь, терпит неудачу. Я опишу, что я пытаюсь сделать, потому что, возможно, это поможет кому-то другому.'Foo' не имеет метода соответствия Foo (:: Bar)
Я создаю три типа: Bar, Baz и Qux, в котором содержится метод foo на барах и базах. Я создаю QUX и запросить его Foo
qux = Wubble.Qux()
qux.foo
я получаю следующие два метода, как и ожидалось:
foo(bar::Bar)
foo(baz::Baz)
Тогда, когда я пытаюсь реально использовать qux.foo с баром или Баз, его дает мне ошибку 'foo' has no method matching foo(::Bar)
.
К сожалению, я не могу воссоздать эту ошибку с укороченным кодом, а реальный код незаметно длинный. Каковы различные способы получения этой ошибки в этом сценарии, который я пропустил? Это может быть связано с расширением метода и затенением функции, как в this post, но я не смог исправить ошибку.
module Wibble
type Bar
data::Number
function Bar(num::Number=0)
this = new(num)
return this
end
end
end
module Wobble
type Baz
data::String
function Baz(vec::String="a")
this = new(vec)
return this
end
end
end
module Wubble
using Wibble
using Wobble
typealias Bar Wibble.Bar
typealias Baz Wobble.Baz
type Qux
foo::Function
function Methods(this::Qux)
function foo(bar::Bar)
println("foo with bar says ", bar.data)
end
function foo(baz::Baz)
println("foo with baz says ", baz.data)
end
this.foo = foo
return this
end
function Qux()
this = new()
this = Methods(this)
return this
end
end
end
Хорошо знать, но с ++ явно еще многословным инкапсуляция будет трудно отучиться. –