Насколько мне известно, невозможно написать функции или переменные полностью вне области видимости. Тем не менее, можно записать их вне определения класса / объекта. Вы просто должны обернуть их в объект пакета . В основном происходит то, что вместо привязки функции / переменной к данному классу или объекту, вы привязываете ее к пакету. Пример:
package test
package object inside {
def hello = println("Hello from outer space!")
class Foo {
hello // call the function from the package
}
}
Теперь, когда вы создаете Foo, вы должны напечатать «Привет из космоса!».
Не зная полностью, о чем я говорю, я мог представить, что версия скрипта, которую вы упомянули выше, работает, потому что скрипт выполняется в какой-то среде. Итак, представьте, что какой-то класс загружает скрипт, затем оборачивает его в объект и запускает его. Это подразумевает ситуацию, похожую на ту, что описана выше: функции все еще «принадлежат» где-то.