Intereting Posts
Как написать тест котлинского блока с тест-котлин? Генериры Котлина Массив <T> приводит к «Невозможно использовать T как параметр типа reified. Вместо этого используйте класс, но List <T> не делает Kotlin и Java в одном проекте с использованием Eclipse IDE Не удалось получить неизвестное свойство «anko_version» для объекта типа …? Как получить доступ к члену класса «статически» в котлин? Intellij IDEA не добавляет зависимости maven к пути класса kotlin script classpath Справочный каталог проекта из любого места Kotlin проверка недействительности if-else функциональный подход … Как? Как я могу отладить мой котлин коан? Предварительные условия в Котлине – хорошие практики Сбор Kotlin + Maven: нет основного атрибута манифеста Ошибка подтверждения контракта в корде Hello World pt 2 Какие версии kotlin следует использовать для Android Studio 3.0 Canary 1? Kotlin Twitter Outh-Signature Котлин: Путаница с лямбдами и дженериками

Возможно ли иметь расширения функций на лямбдах?

Я хотел бы проверить, не вызывает ли какой-либо код определенное исключение.

В частности, для моего случая я бы хотел написать:

{shaderCodeOf(gl, this::class.java, data + "$FRAGMENT_FAIL.frag")} shallThrow GLException::java.class

Я попытался написать

infix fun (() -> Unit).shallThrow(java: Class<*>)

но у меня не было большого успеха.

любая идея, ребята?

Нет проблем с объявлением функций расширения на lambdas.

 infix fun (()->Unit).shallThrow(java: Class<out Throwable>) { // do whatever you need ^ you mean this, didn't you? } 

Затем:

 {} shallThrow RuntimeException::class.java 

Не прямой ответ на ваш вопрос (методы приемника на лямбдах), но есть альтернативная реализация, которую вы могли бы использовать:

 inline fun <reified T: Throwable> assertThrows(fn: (() -> Unit)) { try { fn() } catch (e: Throwable) { if (e is T) { return } else { fail("Expected ${T::class} but caught ${e::class}") } } fail("Expected ${T::class} but caught nothing.") } 

Который вы можете использовать как assertThrows<MyException> { doStuff(); } assertThrows<MyException> { doStuff(); }