2017-10-29 65 views
0

字類型的處理塊參數調用時:與紅/ REBOL

f [(h test) (h test2)] 

我想:

"<p><h1>test</h1><h1>test2</h1></p>" 

相反,我得到:

"<h1>test2</h1></p>" 

我不能看看爲什麼我的代碼不起作用。請注意,我想在下面使用g函數,因爲我有幾個像函數一樣的函數,每個函數都會調用g來分解它們。所以不要擺脫它,這是故意的。

html: copy "" 
emit: func [code] [repend html code] 

f: func [param [block!]] [ 
    html: copy "" 
    emit: func [code] [repend html code] 
    emit <p> 
    foreach p param [ 
     emit p 
    ] 
    emit </p> 
    return html 
] 

g: func ['arg [string! word!] /local html] [ 
    return h :arg 
] 

h: func ['arg [string! word!]] [ 
    either word? arg [ 
     text: to-string arg 
    ][ 
     text: arg 
    ] 

    html: copy "" 
    emit: func [code] [repend html code] 

    print text 
    emit <h1> 
    emit text 
    emit </h1> 
    return html 
] 

f [(h test) (h test2)] 

更新:

現在我得到了紅色的錯誤: 腳本錯誤:HTML是不是在指定的上下文

f: func[param [block!] /local html][ 
     html: copy "" 
     emit: func [code] [repend html code] 
     emit <p> 
     foreach p param [ 
      emit p 
     ] 
     emit </p> 
     return html 
    ] 

    g: func['arg [string! word!] /local html][ 
    return h :arg 
    ] 


    h: func['arg [string! word!] /local html][ 

     either word? arg [text: to-string arg][ 
     text: arg 
     ] 


     html: copy "" 
     emit: func [code] [repend html code] 

     print text 
     emit <h1> 
     emit text 
     emit </h1> 

     return html 

    ] 

    f [(h test) (h test2)] 

回答

1

好吧,這裏一稍微優化版本爲紅色和雷博爾沒有本功能功能

emit: func [code html] [repend html code] 

f: func[param [block!] /local html][ 
    html: copy "" 
    emit <p> html 
    foreach p param [ 
     emit p html 
    ] 
    emit </p> html 
    return html 
] 

g: func['arg [string! word!] l][ 
    return h :arg 
] 


h: func['arg [string! word!] /local html text][ 
    either word? arg [text: to-string arg][ 
     text: arg 
    ] 
    html: copy "" 
    print text 
    emit <h1> html 
    emit text html 
    emit </h1> html 
    return html 
] 

>>f [ [h test] [h test2]] 
test 
test2 
== "<p><h1>test</h1><h1>test2</h1></p>" 
+0

很好用[]和()非常感謝:) – user310291

2

你的問題是無處不在,新的全球html: copy ""使用初始化已經發布的html。如果你讓本地與規範塊手動或通過與本功能在Rebol2或功能紅色更換FUNC/本地HTML,它應該工作

>>f [ [h test] [h test2]] 
test 
test2 
== "<p><h1>test</h1><h1>test2</h1></p>" 
>> 
+0

我已經更新代碼,使本地HTML看到上面,但紅色我得到腳本錯誤:HTML不在指定的上下文 – user310291

+0

它在紅色,如果你使用函數。你必須定義** html **,**發佈** a.s.o.在相同的情況下 – sqlab