Объявление класса в середине скрипта и его зависимость от скриптов локальными переменными - явный признак плохого дизайна. Если вы не можете спроектировать всю эту систему в оригинальном виде, тогда придерживайтесь процедурного программирования. Основная цель написания ОО-программ - разложить их на маленькие самостоятельные кусочки. В вашем случае это не факторинг и не независимость, и я уверен, что у него нет цели, которую вы могли бы выразить словами.
Другими словами, либо вообще не объявляйте тип Box
, либо делайте это так:
class Box {
Box(weight) { this.weight = weight }
def width, height, weight
}
И используйте это так:
def box = new Box(args[0])
Таким образом, вы получаете абстракцию от weightArg
и args[0]
, а также можете использовать ее в различных сценариях.
В противном случае вы предопределите, что ваша программа будет неуправляемой и, следовательно, мертвой после первой ревизии. За десятилетия существования ОО-программирования это было в значительной степени доказано.
Еще одна вещь, на которую следует обратить внимание: когда вы чувствуете, что вам нужно ввести классы в ваш скрипт, это надежный признак того, что ваша программа должна быть написана как обычное приложение с пакетами и прочим, а не как скрипт. *