处理带有红色/rebol 字类型的块参数
Processing block parameter with word types in red / rebol
调用时:
f [(h test) (h test2)]
我想得到:
"<p><h1>test</h1><h1>test2</h1></p>"
相反,我得到:
"<h1>test2</h1></p>"
我不明白为什么我的下面的代码不起作用。请注意,我想在下面使用 g 函数,因为我有几个类似 h 的函数,每个函数都会调用 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)]
你的问题是到处使用全局 html: copy ""
和新初始化已经发出的 html。如果您手动或通过将 func 替换为 funct Rebol2 中的 或 Red 中的 function,它应该可以工作
>>f [ [h test] [h test2]]
test
test2
== "<p><h1>test</h1><h1>test2</h1></p>"
>>
好的,这里是针对 Red 和 Rebol 的稍微优化的版本,没有 funct 或 function
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>"
调用时:
f [(h test) (h test2)]
我想得到:
"<p><h1>test</h1><h1>test2</h1></p>"
相反,我得到:
"<h1>test2</h1></p>"
我不明白为什么我的下面的代码不起作用。请注意,我想在下面使用 g 函数,因为我有几个类似 h 的函数,每个函数都会调用 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)]
你的问题是到处使用全局 html: copy ""
和新初始化已经发出的 html。如果您手动或通过将 func 替换为 funct Rebol2 中的 或 Red 中的 function,它应该可以工作
>>f [ [h test] [h test2]]
test
test2
== "<p><h1>test</h1><h1>test2</h1></p>"
>>
好的,这里是针对 Red 和 Rebol 的稍微优化的版本,没有 funct 或 function
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>"