Как я создаю дополнительный метод (F#)? [дубликат]

Я буду одобрять дизайн OO по покрытию кода и видеть, не могу ли я переместить те поля в класс, которому нужны они. Таким образом, я попытался бы видеть, могут ли те методы get и методы set быть удалены, как предложено прежде. методы get и методы set повреждающаяся инкапсуляция .

25
задан dlras2 14 August 2013 в 20:24
поделиться

2 ответа

Для расширения F #, которое может быть вызвано из F #:

type System.String with
  member x.Right(index) = x.Substring(x.Length - index)

Обратите внимание, что в бета-версии 1 это не приводит к способу расширения, совместимому с C #.

Для создания расширения методы, видимые в C # (но не используемые в качестве методов расширения в F #), см. ссылку в редактировании Брайана на исходное сообщение.

22
ответ дан 28 November 2019 в 21:47
поделиться

Я знаю, что это не совсем ответ на ваш вопрос, но на него стоит указать. В F # и других функциональных языках вы часто видите модули со статическими методами (например, модуль Seq), которые предназначены для объединения с другими функциями. Насколько я видел, методы экземпляра составить нелегко, и это одна из причин, по которой существуют эти модули. В случае этого расширения вы можете захотеть добавить функцию в модуль String.

module String =
    let right n (x:string) =
        if x.Length <= 2 then x
        else x.Substring(x.Length - n)

Затем она будет использоваться так.

"test"
|> String.right 2 // Resulting in "st"

["test"; "test2"; "etc"]
|> List.map (String.right 2) // Resulting in ["st"; "t2"; "tc"]

Хотя в этом случае метод расширения не будет намного больше кода.

["test"; "test2"; "etc"]
|> List.map (fun x -> x.Right 2)
]
3
ответ дан 28 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: