是否可以访问julia中另一个函数中定义的函数?例如:
let rec loop () =
match read_line () with
| "exit" -> ()
| s -> Printf.printf "I saw %s\n%!" s; loop ()
| exception End_of_file -> ()
答案 0 :(得分:5)
没有。在朱莉亚,将模块用于本地功能通常更具思想性
module F
function g(x)
x^2
end
function f(x)
x * g(x)
end
export f
end
using F
f(2)
F.g(2)
用例是什么?您可以定义自定义类型,为其指定一个函数字段,然后使类型可调用(闭包)以实现您想要的行为。但是,这是否是解决你在朱莉娅问题上的最佳方式是一个不同的问题。
答案 1 :(得分:1)
如果函数f
是可调用类型的实例,包含函数g
作为可访问字段,则可以执行此操作:
julia> type F
g::Function
end
julia> function(p::F)(x) # make type F a callable type
x * p.g(x)
end
julia> f = F(function (x) return x.^2 end) # initialise with a function
F(#1)
julia> f(2)
8
julia> f.g
(::#1) (generic function with 1 method)
如果g
始终是固定函数,则可以通过内部构造函数引入它。
但是为了回应Lyndon上面的评论,一个更好的问题是,你为什么要这样做而不是依赖于julia的动态调度功能呢?