我正在定义一个具有两个字段的简单对象。稍后,我想使用可以读取这些字段的函数来扩展它。(目前,假设它只想打印其中之一。)
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]
给定“定义范围”的工作原理,您的例程定义为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] 删除。
我来说两句