2012-07-20 48 views
2

我想實現一個類似Ruby塊的語言結構。所以Ruby塊是如何實現的(在編譯器中)

main() 
{ 
    i = 123 
    array.function(|x| { puts x + i; }) //the block needs access to the local variable i 
} 

應該編譯好。我查看了1小時的源代碼,但由於我不擅長C,我仍然不知道它們是如何實現它的。我的第一個想法是它是一個嵌套的函數,該地址作爲參數傳遞,但我不確定嵌套函數如何訪問局部變量,因爲它似乎在大多數語言中是不可能的。如果有人可以給我一個如何實現這個想法,我會很高興

+0

當您調用相關的堆棧時,您可以將相關堆棧推入新函數嗎? – alex 2012-07-20 05:48:36

+0

當我調用一個函數時,我只需將參數(每個都有4個字節)推入堆棧,並進行一次調用,將ras上的返回地址推送出去。 – 2012-07-20 05:51:37

+0

塊*可以*作爲匿名函數實現;然而,如果它們在被調用的函數中沒有被取消(沒有'&block'),那麼它們*可以在當前幀上被完全聲明/模擬。 – 2012-07-20 05:52:15

回答