【问题标题】:F#: How to examine content in a n-tuple and return true or false?F#:如何检查 n 元组中的内容并返回 true 或 false?
【发布时间】:2020-03-15 00:23:02
【问题描述】:

考虑这个 F# 代码:

let isSalary employee =
    let (fName,lName,Occupation,Department,SalaryType,
         HoursPerWeek, AnnualSalary, HourlyWage
        ) = employee
    SalaryType = "Salary"
    if(employee.SalaryType = SalaryType) then 
     true
    else 
     false

我在这里遇到错误,有什么解决办法吗?

【问题讨论】:

  • 嗨@dr_hakase,欢迎来到StackOverFlow!您能否详细说明您的问题,并发布您在代码中遇到的错误?您还可以通过以下教程获得帮助:stackoverflow.com/help/how-to-ask

标签: f# f#-data


【解决方案1】:

首先,请发布错误消息和更具体的问题。谢谢!但幸运的是,我可以从这个问题中推断出错误信息。

接下来,如果您想在解构 employee 8 元组后改变 SalaryType,您应该使用 mutable 关键字编写:

let mutable (fName, lName, Occupation, Department, SalaryType, HoursPerWeek, AnnualSalary, HourlyWage) = employee

但你不应该。这将在下面进一步解释。

下一个问题:没有用于访问元组成员的点表示法(没有tuple.member)。只有通过解构才有可能。所以你不能employee.SalaryType

这似乎是问题的症结所在,这是我在学习函数式编程时多次犯的一个错误,而且这是一个难以适应的范式转变。您不应该尝试改变数据,或者在这种情况下,变量。作为一个广泛的规则,变量或 F# 中调用的值不应更改。函数应该是纯函数。

这意味着您传递给函数的任何参数在离开函数后都不应更改。回到调用范围后,employee参数应该是一样的。

你犯了一些语法错误,这让我几乎不可能首先推断出你想要做什么。请在问题中包含此内容。

另外,最后一个吹毛求疵。如您所知,F# 函数中的最后一个表达式是它的返回值。不要使用 if 语句,只需返回您正在测试的条件,如下所示:

let ... ... employee.SalaryType = SalaryType

请阅读更多 https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 2021-09-12
    • 1970-01-01
    • 2019-12-17
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多