Как указывает Дарио, такая функция, как синтаксис _.Foo()
в Scala, в настоящее время недоступна в F #, поэтому вам придется явно написать лямбда-функцию, используя fun a -> a.Foo()
.
Насколько я знаю, такой вопрос время от времени появляется в обсуждениях F #, поэтому он, несомненно, рассматривался командой F #.Это немного сложно (например, хотите ли вы разрешить только использование элементов или другое использование, например, _ + 10
, и какова будет область действия лямбда-выражения?) Кроме того, значение функции является относительно низким по сравнению с другими вещами, которыеможно было бы сделать ... В любом случае, было бы неплохо иметь его!
Это также может быть причиной того, что многие типы F # представляют операции как члены (используемые в стиле ОО), так и функции в модуле (за функциональный стиль).Я думаю, что вы могли бы рассмотреть это как хорошую практику F # (но это зависит от ваших предпочтений дизайна).Например:
type Foo(a:int) =
member x.Add(b:int) = a + b
// Attribute allows you to define module with the same name
[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
module Foo =
let add b (v:Foo) = v.Add(b)
Затем вы можете использовать fun v -> v.Add(10)
и Foo.add 10
для создания значения функции.К сожалению, тип String
не имеет соответствующего модуля со всеми функциями в основных библиотеках F #, поэтому вам придется написать его самостоятельно.