导入的函数缺少在另一个模块中定义的方法
Imported function lacks method defined in another module
我有一个描述框架的模块A
。然后,几个实现框架的模块(这里只是B
)。最后,我希望 C
使用任何实现。
但是,运行下面的例子:
module A
abstract type Ab end
f(::Ab) = "Not NotImplemented"
export Ab, f
end
module B
using Main.A
struct Bb <: A.Ab end
A.f(::Bb) = "B"
export Bb, f
end
module C
using Main.A
struct Cc
btype :: A.Ab
end
f(model::Cc) = f(model.btype)
function g(model::Cc)
@show f(model)
end
export Cc, g
end
using Main.A, Main.B, Main.C
ex0 = B.Bb()
ex1 = C.Cc(ex0)
g(ex1)
returns 一个错误
ERROR: LoadError: MethodError: no method matching f(::Main.B.Bb)
Closest candidates are:
f(::Main.C.Cc) at C:\Users\tangi\.julia\dev\VariationalInequalitySolver\script.jl:2
而且我真的不想在模块 C 中导入 B 来保证通用性。
问题是:
f(model::Cc) = f(model.btype)
在您的 C
模块中,因为它在名称为 f
.
的模块 C
中创建了一个 新函数
你需要写:
A.f(model::Cc) = f(model.btype)
它为模块 A
.
中的函数 f
创建了一个新方法
我有一个描述框架的模块A
。然后,几个实现框架的模块(这里只是B
)。最后,我希望 C
使用任何实现。
但是,运行下面的例子:
module A
abstract type Ab end
f(::Ab) = "Not NotImplemented"
export Ab, f
end
module B
using Main.A
struct Bb <: A.Ab end
A.f(::Bb) = "B"
export Bb, f
end
module C
using Main.A
struct Cc
btype :: A.Ab
end
f(model::Cc) = f(model.btype)
function g(model::Cc)
@show f(model)
end
export Cc, g
end
using Main.A, Main.B, Main.C
ex0 = B.Bb()
ex1 = C.Cc(ex0)
g(ex1)
returns 一个错误
ERROR: LoadError: MethodError: no method matching f(::Main.B.Bb)
Closest candidates are:
f(::Main.C.Cc) at C:\Users\tangi\.julia\dev\VariationalInequalitySolver\script.jl:2
而且我真的不想在模块 C 中导入 B 来保证通用性。
问题是:
f(model::Cc) = f(model.btype)
在您的 C
模块中,因为它在名称为 f
.
C
中创建了一个 新函数
你需要写:
A.f(model::Cc) = f(model.btype)
它为模块 A
.
f
创建了一个新方法