在 v15 中删除对象在 JSL 中,我可以定义一个类并将其用作实例化对象的模板。
如何删除对象?
我一直在使用消息 deleteClass,假设它有点用词不当,实际上它正在删除对象。
但在第 15 版中,它似乎确实删除了该类。使用该消息后,我将无法创建该类的任何其他实例。
我可以使用删除消息,但我认为它只是 deleteClass 的别名,我也有同样的问题。
删除类真的是要消灭整个类定义吗?如果是这样,删除对象的正确方法是什么?
这是一个简单的测试脚本:
names default to here(1);
defineClass("MyClass",{
_value = .,
_init_ = method({value},
_value = value;
),
getValue = method({},
return(_value)
)
});
// this works
obj = newObject( MyClass( 10 ) );
show(obj:getvalue);
// this works
obj = newObject( MyClass( 20 ) );
show(obj:getvalue);
// there should be no harm deleting
// an object once I am finished with it
obj<<DELETE></DELETE>
回复:在 v15 中删除对象谢谢大家,我认为有证据表明重新分配对象变量会破坏对象而不是将其作为内存中的孤儿,
回复:在 v15 中删除对象如果您只是覆盖变量,它似乎正在覆盖它。我跑了
Names Default To Here( 1 );
Define Class(
"Test",
nObs = 20;
addition = Method( {x, y},
(x + y) * nObs
);
append = Method( {a, b},
Char( a ) || " + " || Char( b )
);
);
for(i=1, i<=1000000, i++,
clref = New Object( Test() );
);
delete symbols(clref);
在查看 JMP 的内存使用情况时,它并没有真正移动。我希望如果它没有真正覆盖它,如果我有一百万个,我会看到内存增加。
回复:在 v15 中删除对象我也不明白怎么用。 我认为你不需要它:
Define Class(
"aa",
{_init_ = Method( {a}, this:b = a ), //
x=1, //
m1 = Method( {a, b}, a * b )}
);
//
lcaa42 = New Object( aa(42) );
lcaa42:x= Run Program(//
Executable( "PING.EXE" ), //
Options( {"-n 50", "localhost"} ), //
ReadFunction(
Function( {this},
write(this << read);
)
)
);
wait(5); // report about 5 of the 50 pings to the log
// this will destroy the old object and replace it with a
// new one. The log will report the RunProgram object was
// destroyed; there may be a more clever way to witness the
// destruction...best I could come up with...
lcaa42 = New Object( aa(42.1) ); // the old one is gone
lcaa43 = New Object( aa(43) ); // the class still works
show(lcaa42:b,lcaa43:b); // 42.1,43
Show Classes();使用 32 字节数据 ping v1-PC [::1]:
来自 ::1 的回复:时间<1ms
来自 ::1 的回复:时间<1ms
来自 ::1 的回复:时间<1ms
来自 ::1 的回复:时间<1ms
来自 ::1 的回复:时间<1ms
来自 ::1 的回复:时间<1ms
当 RunProgram 对象被销毁时,外部程序正在生成输出。
使用 JSL 变量来保存 RunProgram 对象。
(可选)向变量发送消息以管理对象的生命周期。
lcaa42:b = 42.1;
lcaa43:b = 43;
// 类 a
_init_ = 方法({a},这:b = a);
m1 = 方法({a, b}, a * b);
x = 1;
这表明第一个对象是通过为保存它的变量分配一个新值而被删除的。
如果复制了其他变量(未克隆)
lcaa42b=lcaa42;
然后必须清除所有副本以销毁对象。
lcaa42b=0;
lcaa42=0;
@EvanMcCorkle
回复:在 v15 中删除对象我不知道。
在可以“定义类”之前,我使用命名空间创建了它们。
对于命名空间,这不起作用,即将变量设置为缺失与删除命名空间不同。
ns = newNamespace("xyz");
ns:a = 10;
ns = .;
show namespaces();回复:在 v15 中删除对象这行得通吗:obj = .;