2010-07-17 58 views
2

Rebol 3中有一個new implementation of FUNCTION,默認情況下允許變量自動綁定到本地上下文。內置FUNCTION和FUNCS插件有什麼區別?

功能似乎與VALUE有問題?測試,因爲它即使變量尚未在運行時設置尚未返回TRUE:

foo: function [] [ 
    if value? 'bar [ 
     print [{Before assignment, bar has a value, and it is} bar] 
    ] 

    bar: 10 

    if value? 'bar [ 
     print [{After assignment, bar has a value, and it is} bar] 
    ] 
] 

如果調用FOO您將獲得:

Before assignment, bar has a value, and it is none 
After assignment, bar has a value, and it is 10 

這不是FUNC工作的方式(只有它BAR說在賦值後有一個值)。但是,然後FUNC不會自動將變量設爲本地。

我在這裏找到了FUNCS基元,由Ladislav Mecir創建的一個庫。它有什麼不同,它有相同的缺點嗎?

http://www.fm.vslib.cz/~ladislav/rebol/funcs.r

+0

當你學習一些關於雷博爾和範圍,你可能想再次看看Rubol,比如這個測試:http://github.com/hostilefork/rubol/blob/master/scope-test.r – HostileFork 2010-07-18 05:03:04

+0

我重新讀了ladislav bindology 10次,甚至都沒有理解,我認爲它會和你一樣,但我會努力;) – 2010-07-18 21:15:42

回答

3

的主要區別是,該功能深度搜索體內設置的話,而只是funcs中淺搜索他們。 FUNCS也使用稍微不同的規格。

FUNCS已經存在了相當長的一段時間(不久前名稱發生了變化)。

那個值?函數「問題」與這樣的事實有關,即函數的局部變量(即使使用FUNC和/ LOCAL來顯式聲明它們)被初始化爲NONE。這會導致VALUE?函數即使在變量尚未初始化的情況下也能生成TRUE。

一般情況下,我不認爲這是一個「大問題」,「以無初始化」,雖然這種行爲是不一樣的全局或對象變量的行爲

+0

對我來說這是一件大事,因爲我經常要測試可選參數。細化不總是用戶友好的我更喜歡能夠忽略params。 – 2010-07-18 21:17:54

+0

我仍不確定你瞭解VALUE嗎?問題。我編寫了示例代碼,假設你運行它來了解它是什麼。 – Ladislav 2010-07-20 06:26:56

+0

關於測試可選參數:無論如何都是可能的。 – Ladislav 2010-07-20 06:35:35

相關問題