我正在尝试理解闲聊。是否可以有一个独立的方法/函数,它不属于任何特定类,并且可以稍后调用:
amethod ['amethod called' printNl].
amethod.
上面的代码给出以下错误:
simpleclass.st:1: expected Eval, Namespace or class definition
我该如何使用Eval
or Namespace
正如错误消息所建议的那样?
我尝试了以下但没有任何效果:
Eval amethod [...
amethod Eval [...
Eval amethod Eval[... "!"
Eval [...
有效,但我想为该块命名,以便稍后调用它。
以下也可以工作,但会立即执行,并且在稍后调用时不会执行。
Namespace current: amethod ['amethod called' printNl].
感谢您的见解。
在 Smalltalk 中,相当于独立方法的是Block
(又名BlockClosure
)。您可以通过将 Smalltalk 表达式括在方括号内来创建它们。例如
[3 + 4]
要评估一个块,您可以向它发送消息value
:
[3 + 4] value
这将回答7
.
块也可能有参数:
[:s | 3 + s]
你评估他们value:
[:s | 3 + s] value: 4 "answers with 7"
如果该块有多个句子,则用点分隔它们,就像在方法体中所做的那样。
Addendum
Smalltalk 中的块是第一类对象。特别是,我们可以使用变量引用它们,就像引用任何其他对象一样:
three := 3.
threePlus := [:s | three + s].
供以后使用
threePlus value: 4 "7"
块可以嵌套:
random := Random new.
compare := [:p :u | u <= p]
bernoulli60 := [compare value: 0.6 value: random next].
然后是顺序:
bernoulli60 value. "true"
bernoulli60 value. "false"
...
bernoulli60 value. "true"
将回答true
大约60%的时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)