Я хотел бы передать закрытие метода в качестве опции, и я делаю то, что показано ниже. Я получаю ошибку компиляции, как показано ниже. Можно ли передать необязательный параметр закрытия функции?Как передать необязательный параметр закрытия функции?
def sampleMethod(a: String, b: String, optionalMethod: Option[(String, Int) => Unit]) {
// do some processing with a and b
optionalMethod match {
case Some(optionalMethod) => {
optionalMethod("a",3)
}
case _
log("no optional method passed")
}
}
// definition of optMethod in some other place
val optMethod = (c: String, d: Int) => {
// some processing with c, d and external values
}
// invoke
sampleMethod("hi", "bye", optMethod) => FAILS TO COMPILE
ERROR = type mismatch. expecting Option[(String, Int) => Unit] found (String, Int) => Unit
sampleMethod ("hi", "bye", Some (optMethod)) – twillouer
optionalMethod.map (f => f ("a", 3)), чтобы быть более ясным – twillouer
Просто потому, что другие языки и их сообщества пользователей неаккуратные termino logy, давайте не будем делать то же самое здесь. «Закрытие» относится к использованию свободных переменных в литерале функции (имена без привязок в теле этой функции) и их ссылки «закрываются» в лексическую среду. Не все функции включают закрытие лексической среды. Не все функции являются функциональными литералами. Например, они часто создаются (автоматически или прозрачно с помощью компилятора или явно) посредством «частичного приложения» другой функции или метода. –