Я не Groovy эксперт, но я читал книгу "Groovy в действии". В Groovy каждое закрытие поставляется с «контекстом», где элементы внутри замыкания могут получить доступ к псевдопеременным, таким как «this», «owner» и «делегат», которые позволяют элементам знать, кто вызвал замыкание. Это позволяет писать DSL как это (из Groovy в действии):
swing = new SwingBuilder()
frame = swing.frame(title:'Demo') {
menuBar {
menu('File') {
menuItem 'New'
menuItem 'Open'
}
}
panel {
// ...
}
}
Обратите внимание, что menuBar «знает», что он принадлежит «frame», потому что он может получить контекстную информацию о владельце и делегате закрытия.
Возможно ли это сделать в Scala? Если да, то как?