Module 如何在Julia中局部扩展基运算符(在模块中)
我不知道如何在本地扩展一个基操作符,我找不到任何关于它的东西Module 如何在Julia中局部扩展基运算符(在模块中),module,julia,overriding,base,Module,Julia,Overriding,Base,我不知道如何在本地扩展一个基操作符,我找不到任何关于它的东西 显然,我可以在全局范围(REPL或module)中重新定义它,具体操作如下: 但是我想让它在我的模块中保持私有,而不是自动导出到全局范围,以免污染它,并且仍然能够在模块中的某些功能中使用扩展。 我试着让。。。end阻塞,甚至在我的模块函数中重新定义它,但它似乎阻止正确导入Base 我想要一些像: module MyModule export my_visible_function function -(x, y::SomeType)
显然,我可以在全局范围(REPL或module)中重新定义它,具体操作如下: 但是我想让它在我的模块中保持私有,而不是自动导出到全局范围,以免污染它,并且仍然能够在模块中的某些功能中使用扩展。
我试着让。。。end阻塞,甚至在我的模块函数中重新定义它,但它似乎阻止正确导入Base
我想要一些像:
module MyModule
export my_visible_function
function -(x, y::SomeType)
# Base.- extension with x and ::SomeType
end
function my_visible_function()
# code using Base.- extension
end
end
有什么办法吗
谢谢您的帮助。您可以创建自己的
-
函数,在模块中隐藏基础。
。只要在模块中定义-
函数之前未显式调用Base.:-
,这将起作用。(更多信息请参见下文。)
然后,您可以定义-
函数,使大多数调用都返回到基。:-
下面是一个例子:
module A
export foo
-(::Any, ::Nothing) = nothing
-(x, y) = Base.:-(x, y)
foo(x, y) = x - y
end
下面的示例表明,在定义自己的-
函数之前,可以在函数定义中使用Base.:-
:
# This works.
module B
export foo, bar
bar(x, y) = Base.:-(x, y)
-(::Any, ::Nothing) = nothing
-(x, y) = Base.:-(x, y)
foo(x, y) = x - y
end
如果在定义自己的-
之前显式地调用-
(从Base)的话,这种方法就不会起作用。下面是一个例子:
julia> module C
export foo
1 - 3
-(::Any, ::Nothing) = nothing
-(x, y) = Base.:-(x, y)
foo(x, y) = x - y
end
ERROR: error in method definition: function Base.- must be explicitly imported to be extended
太好了,谢谢,更清楚了。
# This works.
module B
export foo, bar
bar(x, y) = Base.:-(x, y)
-(::Any, ::Nothing) = nothing
-(x, y) = Base.:-(x, y)
foo(x, y) = x - y
end
julia> module C
export foo
1 - 3
-(::Any, ::Nothing) = nothing
-(x, y) = Base.:-(x, y)
foo(x, y) = x - y
end
ERROR: error in method definition: function Base.- must be explicitly imported to be extended