在函数 Ocaml 中使用“_”
Use of " _ " in functions Ocaml
如果我有一个没有参数并且在列表上工作的函数,例如:
let listToCheck = function
[] -> raise (Failure "No elements")
| hd :: tl -> returnTrueOrFalse _ (*Where "_" should be the list*)
returnTrueOrFalse
定义为:
let returnTrueOrFalse list_ = .... (*returns true or false*)
.
(*some code*)
.
let isTrue = listToCheck [1;2;3] in isTrue
现在,listToCheck
在列表中被调用并且没有参数。
另一方面returnTrueOrFalse
需要争论。
由于 listToCheck
是一个调用列表的函数,我可以使用 listToCheck
中的 _
将该列表作为参数传递给 returnTrueOrFalse
吗?如果是,如何?
您可以重建列表,或者为模式添加别名,或者根本不拆分为头尾:
let listToCheck = function
| [] -> raise (Failure "No elements")
| hd :: tl -> returnTrueOrFalse (hd::tl)
let listToCheck = function
| [] -> raise (Failure "No elements")
| (hd :: tl) as list -> returnTrueOrFalse list
let listToCheck = function
| [] -> raise (Failure "No elements")
| list -> returnTrueOrFalse list
您的函数根本不需要进行模式匹配:
let listToCheck list =
if list = [] then failwith "No elements"
else returnTrueOrFalse list
不过,您可能问的是一个更笼统的问题,而不是关于这个特定代码的问题。对于一般情况,我认为 as
模式可能是您正在寻找的,正如@Bergi 所建议的那样。
如果我有一个没有参数并且在列表上工作的函数,例如:
let listToCheck = function
[] -> raise (Failure "No elements")
| hd :: tl -> returnTrueOrFalse _ (*Where "_" should be the list*)
returnTrueOrFalse
定义为:
let returnTrueOrFalse list_ = .... (*returns true or false*)
.
(*some code*)
.
let isTrue = listToCheck [1;2;3] in isTrue
现在,listToCheck
在列表中被调用并且没有参数。
另一方面returnTrueOrFalse
需要争论。
由于 listToCheck
是一个调用列表的函数,我可以使用 listToCheck
中的 _
将该列表作为参数传递给 returnTrueOrFalse
吗?如果是,如何?
您可以重建列表,或者为模式添加别名,或者根本不拆分为头尾:
let listToCheck = function
| [] -> raise (Failure "No elements")
| hd :: tl -> returnTrueOrFalse (hd::tl)
let listToCheck = function
| [] -> raise (Failure "No elements")
| (hd :: tl) as list -> returnTrueOrFalse list
let listToCheck = function
| [] -> raise (Failure "No elements")
| list -> returnTrueOrFalse list
您的函数根本不需要进行模式匹配:
let listToCheck list =
if list = [] then failwith "No elements"
else returnTrueOrFalse list
不过,您可能问的是一个更笼统的问题,而不是关于这个特定代码的问题。对于一般情况,我认为 as
模式可能是您正在寻找的,正如@Bergi 所建议的那样。