【问题标题】:Using a lambda expression with match使用带有 match 的 lambda 表达式
【发布时间】:2015-10-26 03:29:45
【问题描述】:

我正在尝试使用 lambda 表达式来帮助我返回一个值,但我收到一个错误提示

该函数需要太多的 agruments,或者在一个上下文中使用 没有预期的功能

.

这里是示例代码:

match isTrue with
| true -> 1
| false -> (fun () -> 2) //<----Error

所以这里不能使用 lambda 表达式,还是我遗漏了什么?

【问题讨论】:

  • 这里的主要问题是1int 而函数不是。但可能还有其他东西,在缺失的代码中

标签: f#


【解决方案1】:

作为 F# 的新手,我认为:

(fun () -> 2)

会在匹配表达式中自动执行。我只需要编写所需的代码,如

match isTrue with
| true -> 1
| false -> 
    let something = 48 + 3
    something + 4

【讨论】:

  • (fun () -&gt; 2) 只定义一个没有参数的函数,当调用时将返回 2 ;你当然可以做(fun () -&gt; 2) (),即在定义后立即调用该函数,但在这种情况下,为什么不首先返回 2 呢?
  • 实际代码比简单地返回一个int要详细一些。不过,您对作为论点的缺失单位的解释很有帮助。谢谢。
  • 即使它不仅仅是一个 int ;我仍然没有看到调用刚刚创建的匿名函数与仅执行被称为匿名函数的当前主体(无论是什么)的意义?
  • 我也不明白这一点;现在我意识到我可以简单地写出所需的代码。作为 F# 的新手,无论出于何种原因,我都认为我必须将多行代码打包到一个函数中,才能将它与 match 语句一起使用。可能只是来自 C# 和 LINQ 的宿醉。
猜你喜欢
  • 2013-07-02
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多