如何在一次调用中扩展具有多个功能的对象?

HostileFork说不要相信SE

在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

在ReactJs中通过一次onClick调用多个功能

来自分类Dev

在ReactJs中通过一次onClick调用多个功能

来自分类Dev

一次调用即可列出Windows文件夹中具有某些扩展名的所有文件

来自分类Dev

如何在Actionscript中一次引用多个对象?

来自分类Dev

如何在一次调用中序列化 django QuerySet 和 django 对象?

来自分类Dev

如何从具有相同值的数组对象中打印一次值

来自分类Dev

如何在CoffeeScript中仅执行一次功能

来自分类Dev

如何从具有嵌套对象数组的多个文档中一次获取与mongodoDb查询匹配的所有值

来自分类Dev

一次重命名多个文件,具有相同的扩展名

来自分类Dev

如何在bash中显示具有扩展功能的最后一个命令

来自分类Dev

在Scala中,如何扩展具有多个类的对象?

来自分类Dev

在Scala中,如何扩展具有多个类的对象?

来自分类Dev

如何在sympy中扩展具有多个变量的对数?

来自分类Dev

如何获取一个或多个具有给定 ID 的元素并一次处理一次?

来自分类Dev

如何使用rm一次性删除具有相同扩展名的文件?

来自分类Dev

是否可以一次调用多个方法或对象?

来自分类Dev

我如何在jQuery中具有多个单击功能?

来自分类Dev

如何在仍然调用基本保存功能的同时在Parse中扩展对象的保存功能?

来自分类Dev

如何一次从同一构造函数调用所有对象?

来自分类Dev

如何在多个组件中进行一次api调用

来自分类Dev

第一次如何在没有类型类的情况下调用其他类中的函数?

来自分类Dev

如何在一个类中具有多个FontLoader对象?

来自分类Dev

如何让多个指令在一个服务中仅调用一次相同的诺言?

来自分类Dev

如何每隔X秒调用一次具有更新状态的函数(反应)

来自分类Dev

在节点js中仅一次调用功能

来自分类Dev

如何在 Tkinter 画布上一次移动多个对象?

来自分类Dev

如何在Javascript中一次更改对象的多个属性?

来自分类Dev

如何一次调用存储在列表对象中的一项?

来自分类Dev

如何简化这种“一次清除多个位”的功能?

Related 相关文章

  1. 1

    在ReactJs中通过一次onClick调用多个功能

  2. 2

    在ReactJs中通过一次onClick调用多个功能

  3. 3

    一次调用即可列出Windows文件夹中具有某些扩展名的所有文件

  4. 4

    如何在Actionscript中一次引用多个对象?

  5. 5

    如何在一次调用中序列化 django QuerySet 和 django 对象?

  6. 6

    如何从具有相同值的数组对象中打印一次值

  7. 7

    如何在CoffeeScript中仅执行一次功能

  8. 8

    如何从具有嵌套对象数组的多个文档中一次获取与mongodoDb查询匹配的所有值

  9. 9

    一次重命名多个文件,具有相同的扩展名

  10. 10

    如何在bash中显示具有扩展功能的最后一个命令

  11. 11

    在Scala中,如何扩展具有多个类的对象?

  12. 12

    在Scala中,如何扩展具有多个类的对象?

  13. 13

    如何在sympy中扩展具有多个变量的对数?

  14. 14

    如何获取一个或多个具有给定 ID 的元素并一次处理一次?

  15. 15

    如何使用rm一次性删除具有相同扩展名的文件?

  16. 16

    是否可以一次调用多个方法或对象?

  17. 17

    我如何在jQuery中具有多个单击功能?

  18. 18

    如何在仍然调用基本保存功能的同时在Parse中扩展对象的保存功能?

  19. 19

    如何一次从同一构造函数调用所有对象?

  20. 20

    如何在多个组件中进行一次api调用

  21. 21

    第一次如何在没有类型类的情况下调用其他类中的函数?

  22. 22

    如何在一个类中具有多个FontLoader对象?

  23. 23

    如何让多个指令在一个服务中仅调用一次相同的诺言?

  24. 24

    如何每隔X秒调用一次具有更新状态的函数(反应)

  25. 25

    在节点js中仅一次调用功能

  26. 26

    如何在 Tkinter 画布上一次移动多个对象?

  27. 27

    如何在Javascript中一次更改对象的多个属性?

  28. 28

    如何一次调用存储在列表对象中的一项?

  29. 29

    如何简化这种“一次清除多个位”的功能?

热门标签

归档