Получить имя нестатического члена в F # - PullRequest
2 голосов
/ 17 марта 2019

В C # вы можете получить имя метода, используя

nameof(ISomeClass.SomeMethod)

Это выполнимо в F #? При попытке указать ISomeClass, чтобы получить SomeMethod, он просто говорит: «SomeMethod не является статическим методом»

1 Ответ

3 голосов
/ 17 марта 2019

Вы можете создать метод, основанный на цитатах F #, который извлекает метод интерфейса безопасным для типов способом.

open FSharp.Quotations
open FSharp.Quotations.Patterns

let getMethodName (e: Expr<'T -> 'U>) = 
  match e with
  | Lambda (_, Call (_, mi, _)) -> mi.Name
  | _ -> failwith "%A is not a valid getMethodName expression, expected Lamba(_ Call(_, _, _))"

type ISomeInterface =
  interface
    abstract SomeMethod: unit -> unit
  end


[<EntryPoint>]
let main argv =
  let name = <@ fun (i : ISomeInterface) -> i.SomeMethod () @> |> getMethodName
  printfn "%s" name

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