Мне интересно, существует ли способ создать временную переменную в списке параметров настраиваемой структуры управления.объявить переменную в структуре пользовательского контроля в scala
По сути, я хотел бы создать структуру управления, которая выглядит примерно для цикла, где можно создать переменную, т.е., и иметь доступ к I в теле цикла только:
for(i<- 1 to 100) {
//loop body can access i here
}
//i is not visible outside
Я бы как сделать что-то подобное в моем коде. Например,
customControl (myVar <- "Task1") {
computation(myVar)
}
customControl (myVar <- "Task2") {
computation(myVar)
}
def customControl (taskId:String) ( body: => Any) = {
Futures.future {
val result = body
result match {
case Some(x) =>
logger.info("Executed successfully")
x
case _ =>
logger.error(taskId + " failed")
None
}
}
}
Прямо сейчас, я обойти эту проблему, объявив переменную вне структуры таможенного контроля, которая не выглядит очень элегантно.
val myVar = "Task1"
customControl {
computation(myVar)
}
val myVar2 = "Task2"
customControl {
computation(myVar2)
}
Должно быть возможно написать макрос, чтобы сделать это, используя нетипизированные макросы. У меня нет времени писать это сейчас, но основная идея заключалась бы в том, чтобы иметь макрос с двумя списками параметров, которые будут переписываться в один блок, помещая привязку в начале второго блока. Я начал делать что-то простое, называемое [scala-where] (https://github.com/nc6/scala-where), которое может дать вам представление о том, с чего начать. – Impredicative