Почему мне нужно обернуть мои ссылки метода Kotlin в закрытие?

s = r'abc123d, hello 3.1415926, this is my book'
print re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s)

Вам не нужно escape дважды, когда вы используете raw mode.

Выход: ['123', '3.1415926']

Также тип возврата будет списком strings .Если вы хотите, чтобы возвращаемый тип, как integers и floats, использовал map

import re,ast
s = r'abc123d, hello 3.1415926, this is my book'
print map(ast.literal_eval,re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s))

Выход: [123, 3.1415926]

0
задан Moira 13 July 2018 в 22:48
поделиться

2 ответа

В Kotlin ссылки на функции создаются с помощью оператора :: (не .).

Ваш предполагаемый прецедент может быть легко достигнут с помощью этого:

val eventHandlers: HashMap<RemoteEvent, (bytes: ByteArray) -> Unit> = hashMapOf(
        0x01 to foo::handleEvent,
        0x02 to bar::handleEvent)
                 // ^

Ссылки на функции , Kotlin docs

foo.handleEvent интерпретируются как доступ к свойству , называемому handleEvent (которого не существует.)

foo::handleEvent является экземпляром KFunction, представляющим функцию, называемую handleEvent, и поскольку это соответствует лямбда-сигнатуре (ByteArray) -> Unit, она работает как ожидалось.

Обратите внимание, что это отличается от например C # или C ++, где из-за языковых ограничений методы и свойства / поля не могут использовать одно и то же имя. На этих языках . отлично подходит для групп методов / указателей функций, потому что невозможно foo.bar быть неоднозначным.

4
ответ дан Moira 17 August 2018 в 12:07
поделиться

Без замыканий выражение оценивается (вызывается) в строке.

Закрытие создает анонимный объект с определенным методом (в пределах замыканий), который может быть вызван при необходимости.

Только исключение когда функция, потребляющая лямбда, объявляется как inline, и в этом случае весь функциональный блок вводится в место вызова, включая лямбда (для предотвращения генерации объекта).

0
ответ дан Pawel 17 August 2018 в 12:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: