OCaml是否具有等效的(可能涉及camlp4指令)
Python中的 from module import value1, value2
或
use Module qw[value1 value2];
?
我希望能够写出类似
的内容 open Ctypes (@->), string;;
或open Ctypes ((@->), string);;
而不是
let (@->) = Ctypes.(@->);;
let string = Ctypes.string;;
答案 0 :(得分:3)
最接近的是:
let value1, value2 = Module.(value1, value2)
由于这个原因,开放陈述大部分时间都是邪恶的(特别是在最高层)。
答案 1 :(得分:1)
我担心没有像你描述的那样打开部分模块。
如果您的模块没有命名冲突,那么只需使用open Ctypes
否则,您可以通过
缩短模块名称module CT = Ctypes
(* and then just call CT.some_function instead of Ctypes.some_function *)
您的解决方案非常简洁,但请注意名称string
可能会覆盖OCaml的基本类型string
。
let (@->) = Ctypes.(@->);;
let string = Ctypes.string;; (* override the type string *)
答案 2 :(得分:0)
cppo
和C99以后的C预处理器都具有处理可变参数宏的功能。
这意味着您可以将mookid的元组分配隐藏在宏后面,以避免重复自己。
#define USE_FROM(MODULE, ...) \
let ( __VA_ARGS__ ) = (MODULE . ( __VA_ARGS__ )) ;;
USE_FROM(Printf, printf, sprintf, eprintf);;
let main = begin
Printf.printf "%s\n" "a"
end
还可以通过使用以括号括起来的逗号分隔列表的形式提供参数来使用非可变宏。
#define USE_FROM(MODULE, STUFF) \
let ( STUFF ) = (MODULE . ( STUFF )) ;;
USE_FROM(Printf, (printf, sprintf, eprintf));;
let main = begin
Printf.printf "%s\n" "a"
end