访问函数在另一个函数中定义

时间:2017-04-06 23:58:16

标签: julia

是否可以访问julia中另一个函数中定义的函数?例如:

let rec loop () =
    match read_line () with
    | "exit" -> ()
    | s -> Printf.printf "I saw %s\n%!" s; loop ()
    | exception End_of_file -> ()

2 个答案:

答案 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的动态调度功能呢?