如何通过添加功能来扩展对象,然后使用self访问原始对象?

天才亿万富翁

我正在定义一个具有两个字段的简单对象。稍后,我想使用可以读取这些字段的函数来扩展它。(目前,假设它只想打印其中之一。)

email-service!: context [ 
    key: "abcd" 
    secret: "" 
] 

extend email-service! 'get-folders does [print self/key]

my_email: make email-service! [
    key: "asdfasdf" 
    secret: "who knows?" 
] 

my_email/get-folders 

预期的输出是“ asdfasdf”,但是没有输出任何内容。

稍作改动,将“ does”替换为一个函数:

extend email-service! 'get-folders func [] [print self/key]
HostileFork说不要相信SE

给定“定义范围”的工作原理,您的例程定义为does [print self/key]绑定到封闭上下文中。该上下文可以是模块,也可以是我们在此处看不到的某些上下文。

但是,让我们介绍一个手动上下文只是为了显示我的意思:

context [
    key: "OUTER CONTEXT KEY"

    email-service!: context [ 
       key: "abcd" 
       secret: "" 
    ] 

    extend email-service! 'get-folders does [print self/key]

    my_email: make email-service! [
        key: "asdfasdf" 
        secret: "who knows?" 
    ] 

    my_email/get-folders 
]

这将为您提供“外部上下文关键字”作为输出。您正在定义的此函数仅了解其封闭上下文,不知道您稍后将通过参数传递它成为的新成员email-service!

但是显然您的问题不是关于如何将功能放入电子邮件服务的定义!您想事后添加它。如何连接它以了解电子邮件服务?通过在需要的位置显式绑定函数的主体。

email-service!: context [ 
    key: "abcd" 
    secret: "" 
] 

extend email-service! 'get-folders does bind [print key] email-service!

my_email: make email-service! [
    key: "asdfasdf" 
    secret: "who knows?" 
] 

my_email/get-folders 

那应该为您提供所需的“ asdfasdf”如果要使用某个函数来执行此操作,请执行相同的操作...将正文绑定:

extend email-service! 'get-folders func [] bind [print key] email-service!

由您决定是否将自己的单词绑定到电子邮件服务!并使用它。您在这里不需要它(请注意,我说的print key不是print self/key只需记住,您处理的每个单词都可以具有评估的绑定...甚至对于由多个上下文组成的代码中具有相同拼写的单词,它也可以是不同的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过在Kotlin中使用扩展功能来组织协程

来自分类Dev

如何使用State monad重构代码,以通过添加更多功能来增加模块化?

来自分类Dev

如何通过使用对象的类名,然后调用其任何方法,将对象添加到数组中?

来自分类Dev

为什么要通过自执行功能来执行对象上的功能?

来自分类Dev

直接修改对象与通过复制的实例间接修改对象(然后使原始对象相等)

来自分类Dev

如何使用 jquery 扩展 javascript Function 对象以添加新属性?

来自分类Dev

jQuery使用相同的功能扩展多个对象

来自分类Dev

如何通过jQuery引用扩展的Highslide对象

来自分类Dev

如何创建对象,然后将该对象添加到ArrayList?

来自分类Dev

使用功能扩展对象并引用当前对象

来自分类Dev

kotlin,如何将扩展功能添加到已定义的类伴侣对象中

来自分类Dev

如何在组件中添加/扩展对象

来自分类Dev

如何访问包装的模板对象的功能

来自分类Dev

如何访问其他对象的功能

来自分类Dev

如何通过功能创建按钮传递对象

来自分类Dev

如何使用对象的原始类转换引用?

来自分类Dev

如何使用Javascript访问对象

来自分类Dev

如何使用javascript访问对象?

来自分类Dev

C ++通过传递功能使用对象

来自分类Dev

如何通过 id 访问整个对象

来自分类Dev

如何使用原始 JS 在 SVG 内的外来对象中通过 id/class 选择 HTML 元素

来自分类Dev

通过扩展方法动态添加新的对象属性

来自分类Dev

通过引用访问对象

来自分类Dev

如何通过Activator.CreateInstance实例化对象,然后使用Dapper将其插入表中

来自分类Dev

如何通过参数添加对象属性?

来自分类Dev

是否可以通过使用IE所需的功能来运行phantomjs?

来自分类Dev

是否可以通过使用IE所需的功能来运行phantomjs?

来自分类Dev

如何在 jQuery 对象中使用“self”?

来自分类Dev

如何使用angular.extend扩展对象?

Related 相关文章

  1. 1

    通过在Kotlin中使用扩展功能来组织协程

  2. 2

    如何使用State monad重构代码,以通过添加更多功能来增加模块化?

  3. 3

    如何通过使用对象的类名,然后调用其任何方法,将对象添加到数组中?

  4. 4

    为什么要通过自执行功能来执行对象上的功能?

  5. 5

    直接修改对象与通过复制的实例间接修改对象(然后使原始对象相等)

  6. 6

    如何使用 jquery 扩展 javascript Function 对象以添加新属性?

  7. 7

    jQuery使用相同的功能扩展多个对象

  8. 8

    如何通过jQuery引用扩展的Highslide对象

  9. 9

    如何创建对象,然后将该对象添加到ArrayList?

  10. 10

    使用功能扩展对象并引用当前对象

  11. 11

    kotlin,如何将扩展功能添加到已定义的类伴侣对象中

  12. 12

    如何在组件中添加/扩展对象

  13. 13

    如何访问包装的模板对象的功能

  14. 14

    如何访问其他对象的功能

  15. 15

    如何通过功能创建按钮传递对象

  16. 16

    如何使用对象的原始类转换引用?

  17. 17

    如何使用Javascript访问对象

  18. 18

    如何使用javascript访问对象?

  19. 19

    C ++通过传递功能使用对象

  20. 20

    如何通过 id 访问整个对象

  21. 21

    如何使用原始 JS 在 SVG 内的外来对象中通过 id/class 选择 HTML 元素

  22. 22

    通过扩展方法动态添加新的对象属性

  23. 23

    通过引用访问对象

  24. 24

    如何通过Activator.CreateInstance实例化对象,然后使用Dapper将其插入表中

  25. 25

    如何通过参数添加对象属性?

  26. 26

    是否可以通过使用IE所需的功能来运行phantomjs?

  27. 27

    是否可以通过使用IE所需的功能来运行phantomjs?

  28. 28

    如何在 jQuery 对象中使用“self”?

  29. 29

    如何使用angular.extend扩展对象?

热门标签

归档