F # - публичный литерал - PullRequest
       19

F # - публичный литерал

9 голосов
/ 02 декабря 2009

Есть ли способ определить публичный литерал (public const в C #) для типа? Очевидно, что привязки в типах должны быть закрытыми, а атрибут Literal не может быть применен к элементам.

1 Ответ

9 голосов
/ 02 декабря 2009

Используйте атрибут []. Это делает магию, которую вы ищете. Кроме того, размещение литерального атрибута в значении, таком как строка, позволяет использовать его при сопоставлении с образцом. Например:

// BAD - introduces new value named 'Name'
let Name = "Chris Smith"

match Console.ReadLine() with
| Name -> printfn "You entered my name! %s" Name
| _ -> printfn "You didn't enter my name"

// Good - uses the literal value, matches against the value Name
[<Literal>]
let NameLiteral = "Chris Smith"
match Console.ReadLine() with
| NameLiteral -> "You entered my name!"
| _ -> printfn "You didn't enter my name.

Редактировать: я вижу, что вопрос касается того, как поместить их в пользовательские классы (а не в модули). Я не знаю, можете ли вы открыть публичное поле const / public для чтения только в F #, я посмотрю на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...