f#中的哪个控制表达式允许调用具有不同签名的函数?

f#中的哪个控制表达式允许调用具有不同签名的函数?,f#,F#,假设您想在代码中测试某个项,并且基于它的值,您想调用几个函数中的一个,但是这些函数有不同的签名-您如何在f#中做到这一点 我试着在模式匹配和if-then-else表达式中这样做,但这两个表达式都抱怨,因为函数的值不相同 比如说 let fn1 () = () let fn2 (name : string) = () let a = 1 if a = 1 then fn1 else fn2 "mary" 这将导致“表达式预期单位->单位,但具有类型单位”。如果我使函数签名匹配,错误就会消失

假设您想在代码中测试某个项,并且基于它的值,您想调用几个函数中的一个,但是这些函数有不同的签名-您如何在f#中做到这一点

我试着在模式匹配和if-then-else表达式中这样做,但这两个表达式都抱怨,因为函数的值不相同

比如说

let fn1 () = ()
let fn2 (name : string) = ()

let a = 1

if a = 1 then fn1 else fn2 "mary"
这将导致“表达式预期单位->单位,但具有类型单位”。如果我使函数签名匹配,错误就会消失

我知道if-then-else和模式匹配都是表达式,因此所有分支都必须返回相同的类型。(我承认我很惊讶,这意味着如果调用不同分支中的函数,它们的签名必须完全匹配!)

不管怎么说,在f#里你该怎么做

我的具体例子是,我有一个小脚本,它检查一些用户输入,并在此基础上调用几个函数中的一个,表示与用户输入相对应的用例……这些函数中的每个函数都有不同的签名,我不知道什么样的“控制表达式”在f#中,这将允许我测试输入并调用这些函数


迈克尔

你在找这个:

let fn1 () = ()
let fn2 (name : string) = ()

let a = 1

if a = 1 then fn1 () else fn2 "mary"

按照您的方式,“then”值是unit->unit类型的函数。您需要调用它,因此它的值为unit。
()
是函数的参数,类似于fn2的
“mary”
参数。

您要查找的是:

let fn1 () = ()
let fn2 (name : string) = ()

let a = 1

if a = 1 then fn1 () else fn2 "mary"

按照您的方式,“then”值是unit->unit类型的函数。您需要调用它,因此它的值为unit。
()
是函数的参数,类似于fn2的
“mary”
参数。

您忘记调用
fn1
like
fn1()
您忘记调用
fn1
like
fn1()
对,谢谢您指出这一点。正是这样的小事让我们这些菜鸟疯狂,哈哈。对了,谢谢你指出这一点。正是这样的小事让我们这些菜鸟疯狂,哈哈。