Сокращение для вызова метода на объекте в F # - PullRequest
2 голосов
/ 24 марта 2009

Есть ли способ "генерировать" функции, подобные этой:

fun x -> x.ToString

Я хотел бы иметь возможность превратить метод экземпляра в статический метод, который принимает в качестве параметра «this», например:

items |> Seq.filter my_predicate |> Seq.map Object.ToString

Ответы [ 2 ]

4 голосов
/ 24 марта 2009

это обсуждалось несколько раз на хабе F #. Смотрите, например, методы экземпляра как функции . Это довольно сложная проблема, поэтому, насколько я знаю, в первой версии F # не планируется что-то подобное, но в конце концов было бы здорово иметь что-то подобное: -).

Другой обходной путь, который вы могли бы сделать, - добавить статический член в качестве метода расширения в F #:

type System.Object with
  static member ObjToString(o:obj) = o.ToString()

open System
[ 1 .. 10 ] |> Seq.map Object.ObjToString;;

Но это немного уродливо. Кроме того, кажется, что это работает, только если вы используете другое имя для метода. Я предполагаю, что F # не позволяет вам перегружать существующий метод методом расширения и всегда предпочитает встроенный метод.

1 голос
/ 24 марта 2009

Я не знаю, правильно ли я вас понял, но для этого конкретного примера вы могли бы написать:

items |> Seq.filter my_predicate |> Seq.map (fun x -> x.ToString)

или

let f = fun x -> x.ToString
items |> Seq.filter my_predicate |> Seq.map f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...