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>
Re:v15でオブジェクトを削除する皆さんに感謝します。オブジェクト変数を再割り当てすると、オブジェクトがメモリ内に孤立したままになるのではなく、オブジェクトが破壊されるという証拠が明らかだと思います。
Re: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のメモリ使用量を見ていると、実際には動きませんでした。実際に上書きしていなければ、100万個あればメモリが増えると思います。
Re: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バイトのデータでv1-PC[::1]にpingを実行します。
:: 1からの返信:時間<1ms
:: 1からの返信:時間<1ms
:: 1からの返信:時間<1ms
:: 1からの返信:時間<1ms
:: 1からの返信:時間<1ms
:: 1からの返信:時間<1ms
RunProgramオブジェクトが破棄されたときに、外部プログラムが出力を生成していました。
JSL変数を使用して、RunProgramオブジェクトを保持します。
オプションで、変数にメッセージを送信して、オブジェクトの存続期間を管理します。
lcaa42:b = 42.1;
lcaa43:b = 43;
//クラスaa
_init_ = Method({a}、this:b = a);
m1 =メソッド({a、b}、a * b);
x = 1;
これは、最初のオブジェクトを保持している変数に新しい値を割り当てることによって、最初のオブジェクトが削除されたことを示しています。
他の変数がコピーされた場合(複製されていない場合)
lcaa42b=lcaa42;
次に、オブジェクトを破棄するためにすべてのコピーをクリアする必要があります。
lcaa42b=0;
lcaa42=0;
@EvanMcCorkle
Re:v15でオブジェクトを削除する知らない。
「クラスの定義」が可能になる前は、名前空間を使用してクラスを作成していました。
名前空間の場合、これは機能しません。つまり、変数をmissingに設定することは、名前空間を削除することと同じではありません。
ns = newNamespace("xyz");
ns:a = 10;
ns = .;
show namespaces();Re:v15でオブジェクトを削除するこれは機能しますか:obj=。;