在Rebol 3中,您可以通过附加为对象动态添加键和值:
>> foo: object [x: 10]
>> append foo [y: 20 z: 30]
== make object! [
x: 10
y: 20
z: 30
]
但是,如果您尝试使用函数,它似乎不起作用:
>> foo: object [x: 10]
>> append foo reduce [y: does [print "y"] z: does [print "z"]]
** Script error: invalid argument: make function! [[][print "y"]]
** Where: append
** Near: append foo reduce [y: does [print "y"] z: does [print "z"]]
您可以添加带有extend的函数:
>> foo: object [x: 10]
>> extend foo 'y does [print "y"]
>> foo/y
y
但这只允许您一次添加一个。如何将一个任意键/值的块添加到对象中,并使用其中的一些功能?
延伸只是夹层,
>> source extend
extend: make function! [[
{Extend an object, map, or block type with word and value pair.}
obj [object! map! block! paren!] "object to extend (modified)"
word [any-word!]
val
][
if :val [append obj reduce [to-set-word word :val]]
:val
]]
您可以轻松定义自己的扩展或新功能
extends: make function! [ [{Extend an object}
obj [object!]
funcblk [block!] "with pair(s) of functionname and function"
] [
foreach [name funcon] funcblk [append obj reduce [to-set-word name get funcon]]
]]
然后你就可以做
>> r: does [print "y"] s: does [print "z"]
>> extends foo [y r z s]
== make object! [
x: 10
y: make function! [[][print "y"]]
z: make function! [[][print "z"]]
]
或简称
>> append foo reduce [quote y: does [print "y"] quote z: does [print "z"]]
== make object! [
x: 10
y: make function! [[][print "y"]]
z: make function! [[][print "z"]]
]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句