функция 
                  
                  
                  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 ?
                  
                  
                
Наверно можно только через 2 ф-ии fun withFixture(block: TestFixture.() -> Unit fun TextFixture.doTest(block: ExecutionResult.() -> Unit) //Use site withFixture { doTest { assert(...) } } Или ждать мультиресиверов :)
 Kirill
                          Timofeev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Kirill
                          Timofeev
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  можно да, спасибо но как-то не оч всё равно
Иначе думаю никак, можете пинговать человека сверху, чтобы быстрее делали мультиресиверы)
Обсуждают сегодня