鉴于任何字符串,如'Lorem ipsum dolor sit amet,consectetuer adipiscing elit',我想在坐下之前丢弃每个单词.我已经检查过String中的方法但是找不到这个方法非常有用.这是我的尝试:
| phrase newPhrase |
phrase := 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit'.
newPhrase := phrase substrings.
phrase substrings do: [: word | word = 'sit' ifFalse: [ newPhrase := newPhrase allButFirst ] ifTrue: [ ^ nil ] ].
newPhrase joinUsing: String space
Run Code Online (Sandbox Code Playgroud)
在工作区中进行评估时,它会回答为零,但是必须有一个聪明的方法吗?
我正在尝试找到树(非二进制)的开源实现,如红黑,B树,2-3树或通用树,理想情况下用于Squeak/Pharo,但其他Smalltalk风格的任何其他实现将是没关系.我见过SqueakSource但是有太多的二叉树包,其中大部分似乎属于学生项目.你知道树的实现吗?
这应该是一个简单的问题.:)
我正在使用Pharo/Seaside.我在IDE中使用了重构功能来重命名和删除我的一些方法和类.到现在为止还挺好.
但是,我在删除覆盖父类的方法时遇到了困难.例如,我有一个"MyClass"类,其子类为"WAComponent".我创建了一个方法"样式",它覆盖了父类中的方法.
我决定我真的不需要覆盖"样式",并且想要重构方法>删除"样式".此时我收到以下提示"可能在WAPresenter中调用样式.浏览引用?"
我该怎么办?我只想要超级的"风格"方法,而不是我自己的覆盖.
非常感谢!
子类责任发送者选择器即使在子类具有实现方法时也会卡住.
我认为这个论点可能会导致这种情况发生,但是呢?
谁能告诉我们为什么?
在抽象类中我们有这个
fromString: aString
"init with a string"
^self subclassResponsibility
Run Code Online (Sandbox Code Playgroud)
我正在运行这个:
unit := (Units new fromString: aString)
Run Code Online (Sandbox Code Playgroud)
然后发生错误.
其中Units是抽象类.
Travis Griggs目前的方法可以消除错误
是否有实例创建方法的doubledispatch?
我知道可以通过在具体的方法中调用纯虚方法,使用subclassResponsibility或模板方法来实现纯虚方法.现在,可以创建一个具有默认实现的方法,但必须由子类实现?如果是,如何(在Pharo上)?
示例:假设我想提供一个Collection的子类,它对#add进行一些验证,但是没有实现存储,因此留给它的子类来决定做什么.虽然#add确实有一些实现,但它仍然是完成它的子类责任.
我刚刚使用系统浏览器在pharo中创建了自己的包(MyPackage)和类(MyClass).这是它的外观.
Object subclass: #MyClass
instanceVariableNames: ''
classVariableNames: ''
category: 'MyPackage'
Run Code Online (Sandbox Code Playgroud)
我理解术语子类和类别,而不是获得其他两个术语(instanceVariableNames,classVariableNames)的含义.
我有一个有序的集合,我想将其转换为文字数组.以下是有序集合和所需结果:
an OrderedCollection(1 2 3)
#(1 2 3)
实现这一目标的最有效方法是什么?
我已经下载了Pharo 6.0并尝试跟进他的着名或"臭名昭着"的Pharo示例书(我称之为,因为他们在他们的文档页面上提供的书籍从未与编程语言共振)
它在书中说要开一个操场并按照以下说明操作:
成绩单:"你好世界"; CR.
我已经选择了指令并选择了Do It,但没有任何反应,只显示按Ctrl + D作为快捷方式而已.我认为它应该显示在工作区上的消息,但它不起作用.
对此有何帮助?
一个以前的SO问题提出了有关这成语是在执行efficency方面更好的时间问题:
[ (var := exp) > 0 ] whileTrue: [ ... ]
Run Code Online (Sandbox Code Playgroud)
与
[ var := exp.
var > 0 ] whileTrue: [ ... ]
Run Code Online (Sandbox Code Playgroud)
直观地看,第一种形式似乎在执行期间更有效,因为它节省了一个额外的声明(第二种形式).在大多数Smalltalks中都是如此吗?
试着用两个愚蠢的基准测试:
| var acc |
var := 10000.
[ [ (var := var / 2) < 0 ] whileTrue: [ acc := acc + 1 ] ] bench.
| var acc |
var := 10000.
[ [ var := var / 2. var < 0 ] whileTrue: [ acc := acc + …Run Code Online (Sandbox Code Playgroud) 我有一个带有textArea和textInputField的简单Spec对象.在它旁边,我有另一个Spec不知道的对象.当我将一些文本写入textInputField时,我需要将带有此文本的消息发送到另一个类.我试过播音员,但它不起作用.有没有办法通知其他对象并发送此文本?
对于 Javascript,存在解释运行时状态的优秀介绍:http : //latentflip.com/loupe/
对于 Smalltalk,我从未找到类似的关于运行时和图像快照结构的概述。
据说 Smalltalk 图像由可以相互发送消息的对象组成。这会产生很多问题:
一次只有一个物体处于活动状态吗?
是否有启动指定“进程”对象的“根调度程序”?
每个暂停的图像是否都有活动对象的列表?
如果两个活动对象向第三个对象发送消息会发生什么?
一次只能处理一条消息吗?“原子性”的级别是什么?
两个活动对象如何通信?
是否每个对象都有一个接收到但尚未处理的消息的“收件箱”?
每个对象都有一个事件循环吗?
我有一个包含几个字典的数组.如何使用每个字典都具有年龄的密钥对它们进行排序?
an Array((a Dictionary('age'->'20' 'ID'->1254))(a Dictionary('age'->'35' 'ID'->1350))(a Dictionary('age'->'42' 'ID'->1425)))
Run Code Online (Sandbox Code Playgroud) Person我setters和我一起上课,getters喜欢这样:
Object subclass: #Person
instanceVariableName: 'name document'
classVariableName ' '
package: 'foo'
name
^name
name: anObject
name:= anObject
document
^document
document: anObject
document:= anObject
Run Code Online (Sandbox Code Playgroud)
然后我在我的类中实例化 TestPerson
setUp
p1:= Person name:'Alice' document:='12345'
Run Code Online (Sandbox Code Playgroud)
所以在这里我不明白如何实现我的 getter 来比较我的名字是否真的是 Alice。例如在 Java 中它会是这样的:
p1.getName().equals("Alice");
Run Code Online (Sandbox Code Playgroud) pharo ×13
smalltalk ×11
squeak ×3
visualworks ×2
benchmarking ×1
conceptual ×1
events ×1
inheritance ×1
methods ×1
pharo-5 ×1
runtime ×1
seaside ×1
tree ×1