Hello everyone, I am writing two libraries (let’s say A and B) which should work together, but ideally either should know about other’s existence. I thought I had worked everything out by making use of multiple-dispatch with struct
fields, but seems it works differently as I expected. The essential example looks as follows:
module TestModule
struct Foo
bar
end
testhello(foo::Foo) = hello(foo.bar)
end
struct Buzz
bizz
end
hello(buzz::Buzz) = println("$(buzz.bizz)")
mybuzz = Buzz("Hello")
# Test hello
hello(mybuzz)
# Test testhello
TestModule.testhello(mybuzz)
Is it an expected behaviour or a bug?
TestModule
doesn’t know about the hello
function which is defined outside of it.
Yes, that is the problem. I expeceted that since the TestModule
would know about the type Buzz
the methods for that type would follow. Is it appropriate to add another field to struct for letting TestModule
to know about the hello
method:
module TestModule
struct Foo
bar
hello
end
hello() = nothing
testhello(foo::Foo) = foo.hello(foo.bar)
end
struct Buzz
bizz
end
hello(buzz::Buzz) = println("$(buzz.bizz)")
mybuzz = Buzz("Hello")
# Test hello
hello(mybuzz)
# Test testhello
myfoo = TestModule.Foo(mybuzz,hello)
TestModule.testhello(myfoo)
No, you’d typically want to import or export a hello
function either from TestModule
or into TestModule
.
2 Likes