假设我有下一个groovy代码段:
def weightArg = args[0]
class Box {
def width
def height
def double weight() {
//I want to return the value of weightArg here. How can I do that?
}
}
我想让我的班级Box
使用其环境中的一些变量。这样做的正确方法是什么?
似乎weightArg
应该是静态的,我应该能够从Box
静态初始化器获取它,但我无法克服编译器。
答案 0 :(得分:2)
在脚本中间声明一个类并使其依赖于脚本局部变量是一个糟糕设计的明确标志。如果你不能以OO方式设计整个系统而不是坚持程序编程。编写OO程序的主要目的是将它们分解为很少的独立部分。在你的情况下,它既不是因素也不是独立的,我很确定它没有用语言表达的目的。
换句话说,要么根本不要声明Box
类型,要么就这样做:
class Box {
Box(weight) { this.weight = weight }
def width, height, weight
}
并像这样使用它:
def box = new Box(args[0])
因此,您可以从weightArg
和args[0]
中抽象出来,并且能够在不同的场景中重复使用它。
否则,您的程序无法管理,因此在首次修订后死亡。几十年来,OO编程已经证明了这一点。
另外需要注意的是,当您感觉需要在脚本中引入类时,这是一个可靠的信号,表明您的程序应该被编写为带有包和内容的普通应用程序 - 而不是脚本。
答案 1 :(得分:2)
无论这样做是否“正确”,您可以从Box类中访问权重变量的方法是简单地删除单词“def”。描述原因here。