现在有这样一个场景:
我有一个 module A 中有两个函数foo和bar,bar会调用foo。
在另外一个 module B 中,通过 import A:foo 重载 foo 函数之后,再调用bar可以实现bar函数的替换,但是,似乎并不能动态地在一个函数内部的作用域里重载 foo 函数。举例如下:
module MyTest
module A
export foo, bar
function foo(x::Int)
println("A.foo")
end
function bar()
println("A.bar")
foo(1)
end
end
module B
using ..A
import ..A:foo
export test_1, test_2
function foo(x::Int)
println("B.foo")
end
function test_1()
bar()
end
function test_2()
function foo(x::Int)
println("in test_2 B.foo")
end
bar()
end
function test_3()
function foo(x::Int)
println("in test_3 B.foo")
end
bar()
end
end
end
函数local scope里定义函数是local的,根据lexical scope,bar()调用的是在定义时的那个foo()。加global的话,Julia就会提示要用 eval: ERROR: syntax: Global method definition around REPL[2]:33 needs to be placed at the top level, or use "eval".