Kotlin - функция печати выражений - PullRequest
1 голос
/ 25 мая 2019

В C # я могу представить выражение функции следующим образом:

Expression<Func<int, int, int>> add = (a, b) => a + b;

Строковое представление выражения функции выглядит следующим образом

(a, b) => (a+ b)

В Kotlin я могу представить выражение функции следующим образом:

val add = { a: Int, b: Int -> a + b }

Строковое представление выражения функции выглядит следующим образом

(kotlin.Int, kotlin.Int) -> kotlin.Int

Есть ли способ, которым Kotlin может представлять выражение функции, более выровненное по C #, показывая входные параметры и тело функции?

1 Ответ

2 голосов
/ 25 мая 2019
val add = { a: Int, b: Int -> a + b }

эквивалентно

Func<int, int, int> add = (a, b) => a + b;

не до Expression<...>. И если вы напечатаете это, вы увидите что-то вроде System.Func<int, int, int>, как в Kotlin.

Я не думаю, что у Kotlin есть тип, подобный Expression в стандартной библиотеке, или что вы можете реализовать его без поддержки языка. Его API отражения более богат, чем Java (см. KFunction), но не позволяет получить доступ к телу. Вы можете сделать это с помощью библиотек манипулирования байтовым кодом, но это будет много работы.

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