2017-03-18 52 views
5

我正在使用Rebol3的experimental Ren-C implementation。我無法理解這樣的錯誤:Ren-C錯誤:; 「單詞相對於上下文沒有綁定」

f: func [x /local y][ 
    emit: func [x] [y] 
    y: 0 
    forall x [emit f []] 
    0 
] 

f [0 0] 

** Script error: y word is bound relative to context not on stack

** Where: emit forall f do catch either either --anonymous-- do trap either --anonymous--

** Near: ... y

有什麼不好的代碼?

+0

評論不適用於擴展討論;這個對話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/138621/discussion-on-question-by-giuliolunati-rebol3-ren-c-implementation-error-wor)。 –

+0

另外,考慮使用[meta]進行標記討論。 –

回答

6

這是所謂的specific binding的副產品,並且表現正如預期。

問題是因爲您使用FUNC而不是功能f,emit不是f的本地。每次運行f時,都覆蓋全局emit,而每個特定實例化的y都是本地的。

因此,在每次調用時被覆蓋的全局發射,最終得到一個發射函數的一個版本,其概念y相對於不再存在的對f的調用。

如果你真的打算創建一個新的地方舉行一個獨特的功能 - 與y的獨特理念 - 每次運行時,你可以這樣做顯式:

f: func [x /local y emit][ 
    emit: func [x] [y] 
    y: 0 
    forall x [emit f []] 
    0 
] 

f [0 0] 

或含蓄:

f: function [x] [ 
    emit: func [x] [y] 
    y: 0 
    forall x [emit f []] 
    0 
] 

f [0 0] 
+0

感謝您澄清! – giuliolunati

相關問題