gpt4 book ai didi

grails - 成员变量变成空值,是虚假的?

转载 作者:行者123 更新时间:2023-12-02 14:51:32 25 4
gpt4 key购买 nike

我发现一个断言失败,我试图在下面进行概述。简要地说,当我调用重写的方法时,初始化的类成员会虚假地变为null。

abstract class A<T> {
T target

def something() {
assert target != null // sanity check -- fails when invoked below
return this
}
}

class B extends A<Something> {
static B makeB() {
def b = new B()
b.target = new Something();
assert b.target != null
return b
}
}

// package test
// Test code
//
def b = B.makeB() // <-- success.
assert b != null
assert b.target != null
b.something() // <-- fails assertion
print "Success!"

我在生成最小的测试用例时遇到了麻烦-上面的代码(用Long代替Something)可以在compileonline.com上成功运行,但是不能在我们的计算机上运行我们的代码。

如果我在子类B中重新实现 something方法,问题将消失。

有没有人观察到类似的效果?我已经对此感到非常沮丧。

最佳答案

发现问题:Mixin使用相同的成员名称

逐步检查代码并仔细检查本地堆栈变量,我们发现Grails Integration Test Mixin有一个实例变量target,它正在接收分配消息。 大概,任何与mixin的实例变量共享名称的实例变量都应遵循我上面描述的行为,但是我们不知道完整的条件集

在时间上最合理的解决方案(点头@cfrick)是将我们的变量target重命名为其他名称。

后续问题

  • 这是预期的行为吗?坏海中的最佳解决方案?
  • 使用新的Groovy编译器或Grails堆栈是否已更改此行为?
  • (仍然相关)最小测试用例是什么?
  • 关于grails - 成员变量变成空值,是虚假的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26604791/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com