Неожиданный символ '<-' в переплете - PullRequest
0 голосов
/ 18 января 2019

Я новичок в F #. Что не так с этим кодом?

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

Компилятор сообщает мне «Неожиданный символ« <- »в привязке. Ожидаемый« = »или другой токен» </p>

MerchantTerminal имеет тип C #:

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

MerchantTerminalCategory: C # enum

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

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Грубый Fsharp Эквивалент вашему коду C #:

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

Использование по вашему вопросу:

Ваше использование будет выглядеть примерно так. Вы только пропустили задание = op здесь.

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

Дополнительный комментарий

В качестве дружественного предложения "кода комментария", одно из преимуществ использования конструкции, подобной enum, состоит в том, чтобы избежать использования null. Если это вообще возможно, вы должны вытащить пустую часть и использовать доступные состояния перечисления для представления состояния NotSet по умолчанию, возможно, используя то, что у вас уже есть, или через новое состояние.

0 голосов
/ 18 января 2019

В вашем определении let отсутствует знак равенства. Это должно быть прямо перед телом, как let x = 5 или let f x = x + 5.

Как это:

let setCategory (terminal: MerchantTerminal) =
    terminal.Category <- Nullable(MerchantTerminalCategory.NotSet)
    ()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...