【发布时间】:2017-05-10 19:41:23
【问题描述】:
我基本上已经浏览了所有 Julia 文档,但我找不到任何答案。我的问题可以分为两部分。代码 sn-ps 忽略基本 s 初始化之类的东西。
第 1 部分:如何在没有jl_eval_string() 的情况下传递基本复杂类型
假设我有一个 C/C++ 程序,它调用一些 Julia 脚本,为一个函数 f 执行一些 String 操作。在 C 源代码中:
char* parameter_string; // Initialized as something.
jl_module_t *m = (jl_module_t *) jl_load("Script.jl");
jl_function_t *f = jl_get_function(m, "f");
jl_value_t * ret = jl_call1(f, /*???*/) <--- Problem
现在,请注意,手册仅描述了如何将原语装箱,例如 int、float、double。与String 之类的复杂类型无关。是的,我可以使用jl_eval_string(parameter_string),但我不喜欢这样。此外,ret 将是一个字符串,我不知道如何将它提取到 C。它是无证的。
第 2 部分:
假设我有一个 C/C++ 程序,它调用一些 Julia 脚本,其中有一个状态机。为了创建状态机,我创建了一些类型:
abstract State
type Idle <: State end
type State1 <: State end
type State2 <: State end
然后是一个转换函数:
function transition(s :: State, input :: String) # input :: String is arbitrary
.. Do Something ..
return newState
end
现在,如果我想在 C 中创建一个State,比如Idle...我找不到这样的东西,更不用说找到从 Julia 那里检索它的方法了。
我在处理这个问题时或多或少有点像 Haskell、Scala 或 F# 等函数式编程语言。代数数据类型在这里可能没有得到很好的支持,但我认为它仍然比用整数硬编码要好。
真正的问题是我无法在 Julia 上找到任何 C API 文档,除非直接深入研究它的源代码。
【问题讨论】: