我试图将Squeak/Pharo安装到Ubuntu服务器机器上.
./squeak -vm-display-null ./Pharo-1.2.2-12353/Pharo-1.2.image
Run Code Online (Sandbox Code Playgroud)
它执行了,但没有命令行.没有GUI就无法使用?
user-interface smalltalk squeak command-line-interface pharo
我对smalltalk不是很熟悉,但是当我初始化自己的类时,我正在尝试做的是覆盖另一个类'new'.这与Class >> bindingOf有什么关系:?
编辑:
我想要实现的是:如果ObjectA调用new,则ObjectB处理请求.
ObjectB与ObjectA无关.
这可以通过仅改变ObjectB的实现来完成吗?
编辑:我ObjectB在这个故事中是一个ObjectTracer和我想要它做的是表现得像一个包装类ObjectA.我是否更改ObjectA了new使用类的方法字典的实现,以及如何完成?
编辑:这是我想要的:
| obj |
obj := ObjectA new.
obj aMethod.
Run Code Online (Sandbox Code Playgroud)
而到底发生了什么的是,当new被送到ObjectA,它与所提供的实施方案替换的ObjectB(包装)和像aka.nice和埃尔南在他们的答案中提到,ObjectB使#doesNotUnderstand处理用于消息ObjectA.
从本质上讲,是有可能,然后,所有我需要的是让ObjectB更换ObjectA的#new?
在Pharo中我想创建一个类方法,它创建一个新的person对象,并在一个方法中设置一个名称和年龄(两个参数)
Object subclass: #Person
instanceVariableNames: 'name age'
classVariableNames: ''
category: '...'
Run Code Online (Sandbox Code Playgroud)
但是我无法访问类方法中的实例变量.
name: n : age: a
"Class method that creates a Person Object and defines its name and age"
| person1 |
person1 := self new.
person1 name := n. "Unable to compile past this point due to red syntax highlighting
person1 age := a.
^person1.
Run Code Online (Sandbox Code Playgroud)
我的目标是能够致电:
aPerson := Person name: 'Pharo' age: '4'
Run Code Online (Sandbox Code Playgroud) 我有一个制作汽车对象的课程.它有两个实例变量:Make和Color.我在工作区内调用此方法时出现问题(如下所示)
类方法-Constructor
make: aMake color: aColor
"Creates a new car object, sets its instance variables by the arguments"
|car|
car := self new.
car setMake: aMake setColor: aColor. "accessor method below"
^car
Run Code Online (Sandbox Code Playgroud)
存取方法
setMake: make setColor: color
"sets the instance variables"
Make := make.
Color := color.
Run Code Online (Sandbox Code Playgroud)
工作区(调用代码)
|car|
car := Car make: 'toyota' color: 'red'
Run Code Online (Sandbox Code Playgroud)
调用此行时,我收到"消息未被理解".这是什么问题?
假设我们有一个类,我们实例化它,创建该类的实例.该实例有一些我需要使用的由类定义的(实例)变量.我想把所有这些(实例)变量放在一个数组或一些Collection中,这样我就可以迭代它们并将它们设置为某个值,而不是nil.
我怎样才能做到这一点?
由于我不了解Pharo smalltalk中的任何不等运算符,因此很难检查字符串的不等式.这是我目前的代码:
[ contact password = contact confirmPassword and: firstTime = false and: (contact password = '' ifTrue:[^false])] whileFalse: [ code]
Run Code Online (Sandbox Code Playgroud)
即这部分:
(contact password = '' ifTrue:[^false])
我究竟做错了什么?有没有更好的方法来检查字符串是否为空?
在主页上的pharo海滨应用程序按钮上单击所有数据将保存在一个类名为Test.fl的燃料文件中.如果我在两个实例中一次调用同一个主页,则两个都调用以下代码来保存带有最新更新的Test.fl文件,
FLSerializer
serialize: self allObjects
toFileNamed: self name , '.fl'**
Run Code Online (Sandbox Code Playgroud)
并获得例外:
CannotDeleteFileException:无法删除旧版本的文件...\Pharo3.0\Test.fl
我已经使用Mutex允许在第一个实例之后执行另一个实例,
mutexBlock := Mutex new.
mutexBlock critical: [
FLSerializer
serialize: self allObjects
toFileNamed: self name , '.fl' ]
Run Code Online (Sandbox Code Playgroud)
但我仍然得到同样的错误
CannotDeleteFileException:无法删除旧版本的文件
请有人帮我解决这个错误.
我一直在使用Pharo 7.0中的键盘快捷键.我想#jumpToNextKeywordOfIt在Smalltalk编辑器中修改绑定,所以我在buildShortcutsOn方法的定义中得到了以下更改:
(aBuilder shortcut: #jumpToNextKeywordOfIt)
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是,只是保存这个定义应该立即生效,但事实并非如此.然后我想,也许因为这是方法定义的一部分,然后在编辑器类上调用这个方法就可以了.现在,该方法需要一个参数aBuilder,我真的不知道那是什么.所以出现两个问题:
aBuilder在这种背景下是什么,如何得到它?有没有简单的方法来检查两个数组是否包含相同的元素?
true如果数组不相同,这是我返回的尝试:
arr1 := #(1 3 5 6).
arr2 := #(1 2 3 4).
arr2Copy := arr2 copyFrom: 1 to: arr2 size.
arr1 size ~= arr2 size
ifTrue: [^ true].
arr1
do: [:a | (arr2copy removeFirst = a)
ifFalse: [^ true]].
^false
Run Code Online (Sandbox Code Playgroud)