Статическая функция в fsharp на обычных классах - PullRequest
2 голосов
/ 29 февраля 2012

Я постоянно вызываю статические методы, вызывающие статический класс, и это кажется мне неестественным:

let l = Seq.length myseq

Для меня было бы более естественным использовать

let l =  myseq.length

, как вы можете себе представитьто же самое для многих базовых классов

Есть ли способ сделать все эти методы автоматически доступными в качестве метода экземпляра, без написания методов расширения для каждого из них?

Ответы [ 4 ]

4 голосов
/ 29 февраля 2012

Есть ли способ сделать все эти методы доступными автоматически как метод экземпляра, без написания методов расширения для каждого из них?

Нет.И даже если бы вы это сделали, вы потеряли бы преимущества вывода типов в F #.

2 голосов
/ 29 февраля 2012

В общем случае нет способа обрабатывать значения из модулей, как если бы они были членами экземпляра. Однако в случае модуля Seq вы можете найти аналоги членов расширения многих из функций Seq в пространстве имен System.Linq, поэтому вы можете сделать:

open System.Linq

let arr = [| 1 .. 10 |]
let ct = arr.Count()
let arr2 = arr.Select(fun i -> i + 1)
// etc.
1 голос
/ 29 февраля 2012

Как насчет использования оператора канала?

let l = myseq |> Seq.length

Редактировать: Или

let l = myseq.Count()

Редактировать 2:

Как указано в kvb Count () требует System.Linq

0 голосов
/ 29 февраля 2012

Вас беспокоит тот факт, что Intellisense не помогает вам узнать, какие действия доступны?

Как писал Umair выше, стиль конвейерной обработки определенным образом наиболее близок к тому, что вы ищете. Но на самом деле вы должны знать правильный модуль, в котором определены функции.

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