Я пытаюсь написать функцию, которая, по сути, является методом-оболочкой для некоторых других функций, например, для некоторой функции ведения журнала.
Я пробовал несколько комбинаций inline
, generic
, reified
и т. Д., Но, похоже, ничего не работает.
Моя функция выглядит так:
fun log(note: String, block: () -> Unit): () -> Unit {
print(note)
return block
}
Моя идея здесь состоит в том, чтобы выполнить некоторую простую операцию над входящим note
, а затем просто вернуть ту входящую функцию, которая будет использоваться в том виде, в котором она была изначально.
Однако я хочу сделать это вокруг переопределенных функций, например так:
override fun onClick(clicked: View) = log("Green Button") {
// here the regular onClick functionality goes
}
Здесь я получаю сообщение об ошибке " Тип возвращаемого значения () -> Unit, который не является подтипом переопределенного ". Это имеет смысл, так как сигнатуры функций не совпадают.
Однако, когда я делаю это с другими случайными функциями:
fun test() = log("foo") { ... }
fun otherTest(a: String, b: Int) = log("bar") { ... }
Я не получаю ошибок, и интерпретатор почему-то, кажется, хорошо с этим. Я также попытался взглянуть на что-то вроде GlobalScope.launch
, чтобы принять такой подход, но я не мог понять это.
Возможно ли то, что я пытаюсь сделать? Если нет, то есть что-нибудь близкое?