我正在使用 Pharo+Squeak 学习 Smalltalk。我尝试将 Playground/Workspace 用作控制台,并弄清楚如何在那里做所有事情。我还没有弄清楚的一件事是如何向类添加方法。
假设我创建了一个 Cat
类
Object subclass: #Cat
instanceVariableNames: ''
classVariableNames: ''
package: 'User Defined'.
要将方法makeSound
添加到Cat
,我可以在系统浏览器中找到它
Cat browse.
并在那里创建一个新的makeSound
方法
makeSound
"Make Cat object make sound."
Transcript show: 'Meow!'.
然后我可以实例化 Cat
并向它发送一条 makeSound
消息
cat := Cat new.
cat makeSound.
Meow!
将按预期显示在 Transcript
流中。
现在,我不知道如何使用“控制台”完成所有这些操作。在 Pharo by Example 一书中提到,引用方法的约定是使用 ClassName>>methodName
,并且有一些代码片段看起来像这样(我可能屠宰它!)
Cat class>>makeSound
Transcript show: 'Meow!'.
当我在 Playground/Workspace 中输入它时,它不起作用。
最佳答案
此语法主要用于将方法插入文档。它不是可以直接在系统浏览器或 Playground 中执行的东西。例如采用您的方法:
Cat>>makeSound
Transcript show: 'Meow!'.
这只是告诉读者 makeSound
方法在类 Cat
中。它不可执行。它应该是 Cat>>makeSound
而不是 Cat class>>makeSound
。第二个表示该方法在类端。
您可以通过编译将方法添加到工作区中的类:
Cat
compile: 'makeSound
"Make Cat object make sound."
Transcript show: ''Meow!''.'
classified: 'actions'.
您还可以使用消息>>
:Cat>>#makeSound
直接从类访问已编译的方法对象。一旦你有了这个方法对象,你也可以在一个对象上执行它:
(Cat>>#makeSound) valueWithReceiver: Cat new arguments: #().
关于oop - 如何使用 Playground/Workspace(而不是通过系统浏览器)创建方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47926445/