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의 메모리 사용량을 보는 동안 실제로 움직이지 않았습니다.실제로 덮어쓰지 않았다면 백만 개의 메모리가 있으면 메모리가 올라가는 것을 볼 수 있을 것으로 예상합니다.
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] 핑:
::1: time<1ms에서 회신
::1: time<1ms에서 회신
::1: time<1ms에서 회신
::1: time<1ms에서 회신
::1: time<1ms에서 회신
::1: time<1ms에서 회신
RunProgram 개체가 소멸될 때 외부 프로그램이 출력을 생성하고 있었습니다.
JSL 변수를 사용하여 RunProgram 개체를 보관합니다.
선택적으로 개체의 수명을 관리하기 위해 변수에 메시지를 보냅니다.
lcaa42:b = 42.1;
lcaa43:b = 43;
// 클래스 aa
_init_ = 메서드({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 = .;