我定义了一个高阶函数,代码如下:
val func : int -> string -> unit
我希望能以两种方式使用这个功能:
other_func (func 5)
some_other_func (fun x -> func x "abc")
即,通过定义一个参数来创建函数。然而,第二种用法不如第一种简洁和易读。是否有更易读的方法将第二个参数传递给另一个函数?
我定义了一个高阶函数,代码如下:
val func : int -> string -> unit
other_func (func 5)
some_other_func (fun x -> func x "abc")
即,通过定义一个参数来创建函数。然而,第二种用法不如第一种简洁和易读。是否有更易读的方法将第二个参数传递给另一个函数?
flip
的函数可以解决这个问题。你可以自定义它:let flip f x y = f y x
那么你可以说:
other_func (func 5)
third_func (flip func "abc")
Flip在Jane Street Core中定义为Fn.flip
。在OCaml Batteries Included中定义为BatPervasives.flip
。(换句话说,每个人都认为这是一个有用的函数。)
# let func i s = if i < 1 then print_endline "Counter error."
else for ix = 1 to i do print_endline s done;;
val func : int -> string -> unit = <fun>
# func 3 "hi";;
hi
hi
hi
- : unit = ()
# let f1 n = func n "curried second param";;
val f1 : int -> unit = <fun>
# f1 4;;
curried second param
curried second param
curried second param
curried second param
- : unit = ()
#
other_func
和some_other_func
是高阶函数(它们操作其他函数),而不是func
。 - Martin Jambon