如何使用 Playground/Workspace(而不是通过系统浏览器)创建方法?
How to create a method using the Playground/Workspace (and not through the System Browser)?
我正在使用 Pharo+Squeak 学习 Smalltalk。我尝试使用 Playground/Workspace 作为控制台,并弄清楚如何在那里做所有事情。我还没有弄清楚的一件事是如何将方法添加到 class.
假设我创建了一个 Cat
class
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
流中。
现在,我不知道如何使用 "console" 来完成所有这些工作。在 Pharo by Example 书中提到,引用方法的约定是使用 ClassName>>methodName
,并且有看起来像这样的代码片段(我可能在屠杀它! )
Cat class>>makeSound
Transcript show: 'Meow!'.
当我在 Playground/Workspace 中输入时它不起作用。
此语法主要用于将方法插入文档。它不是可以直接在系统浏览器或 Playground 中执行的东西。例如采用您的方法:
Cat>>makeSound
Transcript show: 'Meow!'.
这只是告诉 reader 方法 makeSound
在 class Cat
中。它不可执行。它应该是 Cat>>makeSound
而不是 Cat class>>makeSound
。第二个表示方法在class这边。
您可以通过编译将方法添加到工作区中的 class:
Cat
compile: 'makeSound
"Make Cat object make sound."
Transcript show: ''Meow!''.'
classified: 'actions'.
您还可以使用消息>>
:Cat>>#makeSound
从class 直接访问已编译的方法对象。一旦你有了这个方法对象,你也可以在一个对象上执行它:
(Cat>>#makeSound) valueWithReceiver: Cat new arguments: #().
如果您使用 "File Out" 功能并检查生成的代码,您会注意到使用感叹号的语法。这不是最易读的语法,也不适合人类阅读或编写。
Pharo 与 Squeak 一样,遵循 Smalltalk-80 理念,即利用 GUI 提供多种工具,如 Playground、Debugger、Inspector 和 System Browser,每一种都提供非常专业的功能。那是因为 Smalltalk(以及一些派生语言,如 Self)不仅仅是关于代码,而是关于对象和消息,并且它们可以有多种表示形式,通常是视觉表示形式。
事情的美妙之处在于一切都使用这个比喻来定义,包括环境工具。因此,您可以轻松更改它们以适应您的开发风格,或者安装和使用另一个,如 Calypso。
即使您想开发更传统的脚本式程序,我也建议您尝试使用系统浏览器来开发它,并且只求助于 Playground 进行一些快速实验。 Pharo 在部署 "headless" 应用程序方面做得越来越好,所以这不会成为问题。
如果您担心 Git,请查看 Iceberg。它以最易读的方式序列化您的代码,因此您的差异在 Github 上看起来不错。
我正在使用 Pharo+Squeak 学习 Smalltalk。我尝试使用 Playground/Workspace 作为控制台,并弄清楚如何在那里做所有事情。我还没有弄清楚的一件事是如何将方法添加到 class.
假设我创建了一个 Cat
class
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
流中。
现在,我不知道如何使用 "console" 来完成所有这些工作。在 Pharo by Example 书中提到,引用方法的约定是使用 ClassName>>methodName
,并且有看起来像这样的代码片段(我可能在屠杀它! )
Cat class>>makeSound
Transcript show: 'Meow!'.
当我在 Playground/Workspace 中输入时它不起作用。
此语法主要用于将方法插入文档。它不是可以直接在系统浏览器或 Playground 中执行的东西。例如采用您的方法:
Cat>>makeSound
Transcript show: 'Meow!'.
这只是告诉 reader 方法 makeSound
在 class Cat
中。它不可执行。它应该是 Cat>>makeSound
而不是 Cat class>>makeSound
。第二个表示方法在class这边。
您可以通过编译将方法添加到工作区中的 class:
Cat
compile: 'makeSound
"Make Cat object make sound."
Transcript show: ''Meow!''.'
classified: 'actions'.
您还可以使用消息>>
:Cat>>#makeSound
从class 直接访问已编译的方法对象。一旦你有了这个方法对象,你也可以在一个对象上执行它:
(Cat>>#makeSound) valueWithReceiver: Cat new arguments: #().
如果您使用 "File Out" 功能并检查生成的代码,您会注意到使用感叹号的语法。这不是最易读的语法,也不适合人类阅读或编写。
Pharo 与 Squeak 一样,遵循 Smalltalk-80 理念,即利用 GUI 提供多种工具,如 Playground、Debugger、Inspector 和 System Browser,每一种都提供非常专业的功能。那是因为 Smalltalk(以及一些派生语言,如 Self)不仅仅是关于代码,而是关于对象和消息,并且它们可以有多种表示形式,通常是视觉表示形式。
事情的美妙之处在于一切都使用这个比喻来定义,包括环境工具。因此,您可以轻松更改它们以适应您的开发风格,或者安装和使用另一个,如 Calypso。
即使您想开发更传统的脚本式程序,我也建议您尝试使用系统浏览器来开发它,并且只求助于 Playground 进行一些快速实验。 Pharo 在部署 "headless" 应用程序方面做得越来越好,所以这不会成为问题。
如果您担心 Git,请查看 Iceberg。它以最易读的方式序列化您的代码,因此您的差异在 Github 上看起来不错。