169 похожих чатов

Привет Вопрос про вложенность extension функций с ресивером: вот была у меня

функция
fun doTest(..., doAssert: ExecutionResult.() -> Unit)
было очень удобно вызывать её и вторым параметром передавать функцию, в которой подряд шли вызовы extension функций на ExecutionResult e, вот так:
fun ExecutionResult.assertString(...) = ...

doTest(...) { // this: ExecutionResult
assertString("This is test!")
}

но потом оказалось, что эти самые ассерты должны лежать не в базовом классе теста, а быть методами класса TestFixture:
class TestFixture {
fun ExecutionResult.assertString(...) = ...
}
Но при этом хочется так же компактно вызывать их из лямбды в doTest
можно сделать так:
fun doTest(..., doAssert: TestFixture.(ExecutionResult) -> Unit)
и вызывать её
doTest(...) { result: ExecutionResult -> // this: TestFixture
result.assertString("This is test!")
}
но это как-то не очень.
Не могу придумать есть ли возможность иметь два разных this в лямбде? (ну или как-то иначе эмулировать возможность вызывать функции с ExecutionResult как this ?

4 ответов

6 просмотров

Наверно можно только через 2 ф-ии fun withFixture(block: TestFixture.() -> Unit fun TextFixture.doTest(block: ExecutionResult.() -> Unit) //Use site withFixture { doTest { assert(...) } } Или ждать мультиресиверов :)

Kirill-Timofeev Автор вопроса
Oleg Yukhnevich
Наверно можно только через 2 ф-ии fun withFixture...

можно да, спасибо но как-то не оч всё равно

Kirill Timofeev
можно да, спасибо но как-то не оч всё равно

Иначе думаю никак, можете пинговать человека сверху, чтобы быстрее делали мультиресиверы)

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

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
Слушайте, ещё такая интересная задачка. Сделан аудит действий пользователей через триггеры в базе, соответственно каждый пользователь имеет свой логин и пароль в базе. Это пре...
Сергей Бычков
12
Скажите, тут нет проблемы? IMyInterface1 = interface function GetInterface2: IInterface2; ... function TMyInterface.GetInterface2: IInterface2; begin Result := TI...
Ruslan aka DUDE
18
вопрос по москвину - не понимаю вот такого вопроса похоже Сколько разных всегда завершающихся функций с типом a -> a -> b -> a -> a можно реализовать? Две функции одинаково...
Fedor
11
Кстати, раз про скачивание файлов разговор зашел) Сделал бота для себя (транскрибирующего и суммаризирующего встречи) но не ожидал что за 2 месяца 10к пользователей набежит😅...
Andrey Obolenskiy
8
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Утра доброго. Просветите пожалуйста. Хочу сделать rest сервер на делфи. Посмотрел 3 фреймворка: dmvc, Mars, mormot. Ни в одном из них не упоминается ассинхронная обработка вхо...
Сергей Бычков
10
Как попросить stack install делать executable без .exe на винде?
Danila Danko
9
Карта сайта