2010-07-24 1 views

ответ

3

Clear удаляет записи из блока, на который ссылается слово :

a: [1 2 3 4 5] 
length? a 
== 5 
clear a 
length? a 
== 0 

Unset удаляет слово сам:

a: [1 2 3 4 5] 
length? a 
== 5 
unset 'a 
length? a 
** Script Error: a has no value 
** Near: length? a 
+0

unset должен взять слово ... если вы хотите отключить функцию, вы не сможете без нее выполнить. –

0

UNSET является операцией, берет значение типа WORD! и CLEAR - операция, которая принимает значение типа SERIES! Обратите внимание, что несколько слов могут указывать на одну и ту же SERIES! стоимость ...

>> a: [m a t t] 
== [m a t t] 

>> b: a 
== [m a t t] 

>> clear a 
== [] 

>> b 
== [] 

С момента принятия СЛОВА! в серийную операцию не имеет смысла в настоящее время, технически возможно, что CLEAR может выбрать, узнав, когда вы передали ему СЛОВО! значение и сделать что-то особенное в этом случае (например, посмотреть значение, связанное с этим словом - если есть, - и стереть его значения). Но «косвенное косвенное слово, если нет другого смысла», не является особенно приятным инвариантом, и вы не найдете его в таких операциях, как FIRST или FIND и т. Д.

Обратный случай ... для того чтобы отменить QUOTE его аргумент неявно ... будет технически возможным. Но если бы это было так, как бы вы справились со случаем, когда СЛОВО! для отмены был сохранен в другом СЛОВО?

>> c: [m a t t] 
== [m a t t] 

>> d: 'c 
== c 

>> unset d 

>> c 
** Script error: c has no value 

>> d 
== c 

>> unset 'd 

>> d 
** Script error: d has no value