是否有任何简短的方法将零 - arity函数传递给另一个函数.现在我这样做:
let f a b c = ...;;
a (fun () -> f a b c)
Run Code Online (Sandbox Code Playgroud)
第二行有任何语法糖吗?
Pas*_*uoq 10
怎么样:
lazy (f a b c)
Run Code Online (Sandbox Code Playgroud)
要"申请",请使用Lazy.force,如:
# let l = lazy (2+2) ;;
val l : int lazy_t = <lazy>
# Lazy.force l ;;
- : int = 4
Run Code Online (Sandbox Code Playgroud)
意思并不完全相同(fun () -> ...),... ()而且它并不是真的更短.也许如果你真的需要为它们提供方便的语法,lazy或者fun () ->你应该使用camlp {4,5}扩展来达到这个目的.
如果f被定义为f a b c () = ...,你可以做a (f a b c),但除此之外,没有更短的方法.
如果你愿意,你可以const像这样定义函数:
let const x _ = x
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
a (const (f a b c))
Run Code Online (Sandbox Code Playgroud)
但这并不比使用更短(或更清晰)fun.它f a b c也会立即评估,这可能不是你想要的.
PS:我的学究者需要指出这(fun () -> ...)是一个一元函数,并且ocaml中没有零元素函数.
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |