绑定中出现意外的符号“ <-”

时间:2019-01-18 09:18:08

标签: f#

我是F#新手。此代码有什么问题?

let setCategory (terminal: MerchantTerminal)
    terminal.Category <- Nullable(MerchantTerminalCategory.NotSet)
    ()

编译器告诉我“绑定中出现意外符号'<-'。应为'='或其他标记”

MerchantTerminal是C#类型:

public class MerchantTerminal
{
    public MerchantTerminalCategory? Category { get; set; }    
}

MerchantTerminalCategory是C#枚举

public enum MerchantTerminalCategory
{
    NotSet = 0,
    //other values
}

2 个答案:

答案 0 :(得分:4)

您在let定义中缺少等号。它必须在身体之前,例如let x = 5let f x = x + 5

赞:

let setCategory (terminal: MerchantTerminal) =
    terminal.Category <- Nullable(MerchantTerminalCategory.NotSet)
    ()

答案 1 :(得分:1)

等效于您的C#代码的Fsharp:

type MerchantTerminalCategory = NotSet=0 | Set=1

type MerchantTerminal() =  
    let mutable category = 
        new System.Nullable<MerchantTerminalCategory>()
    member this.Category 
        with get() = category
        and set(value) = category <- value

每个问题的用法:

您的用法如下所示。您只是在这里错过了=作业。

let setCategory (terminal: MerchantTerminal) = //you were missing the assignment "=" op here
    terminal.Category <- Nullable(MerchantTerminalCategory.NotSet)
    ()

其他评论

作为友好的“代码注释”建议,使用像枚举这样的构造的好处之一是避免使用null。如果可能的话,您应该拔出可为空的部分并利用枚举的可用状态来表示默认的“ NotSet”状态,这可能会利用您已有的可用状态或通过新状态。