标签: gnu-smalltalk

何时在smalltalk中调用初始化?

我有一个实例变量'a'的类.

当我使用new创建类的新实例时,调用的方法的顺序是什么?

对象如何知道它应该调用initialize方法?

如果我创建一个类方法来为我的实例变量赋值,是否仍会为我的类方法未调用的其他实例变量调用初始化?

smalltalk gnu-smalltalk

3
推荐指数
1
解决办法
561
查看次数

如何在Smalltalk中覆盖相等方法?

我正在读一本关于Smalltalk,我正在练习关于我无法解决的消失元素异常.

Object subclass: Book [
    | isbn |
    <comment: 'A book class'>

    setIsbn: anIsbn [
        isbn := anIsbn.
    ]

    getIsbn [
        ^isbn.
    ]

    = anotherBook [
        ^self getIsbn = anotherBook getIsbn.
    ]
]

| Library |

Library := Set new: 100.
Library add: (Book new setIsbn: '0-671-2-158-1').
(Library includes: (Book new setIsbn: '0-671-2-158-1')) printNl.
Run Code Online (Sandbox Code Playgroud)

我读过我也要覆盖这个hash方法,但我不知道怎么做.如何修改Book课程以避免异常

smalltalk gnu-smalltalk

3
推荐指数
1
解决办法
946
查看次数

smalltalk中的变量类型

我需要帮助理解Smalltalk中变量的用法和差异.以下给定代码中每个变量的区别和用法是什么?

Object subclass: #MyClass
  instanceVariableNames: 'x'
  classVariableNames: 'Yy'
  poolDictionaries: ''
  category: 'helpMe'

MyClass class
  instanceVariableNames: 'zzz'
Run Code Online (Sandbox Code Playgroud)

smalltalk squeak gnu-smalltalk

3
推荐指数
1
解决办法
1031
查看次数

Smalltalk变量:我为什么要声明它们?

基本上我可以通过为它们分配一些东西来使用变量,例如:

x := something
Run Code Online (Sandbox Code Playgroud)

它工作正常.

但是在类中,如果我定义一个新方法,但是我没有声明变量,我得到一个"赋值给未声明的变量x",所以我必须使用:

|x| x := something
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

smalltalk gnu-smalltalk

3
推荐指数
2
解决办法
1047
查看次数

是否有一种特定的方法来获取Pharo smalltalk中的计算机的IP?

我正在尝试运行一个应用程序Pharo,它需要来自运行它的主机的IP的数据.一般情况下,我必须打开代码,在我的Pharo代码中手动设置它,然后启动应用程序.是否有更好的编程方式获取IP地址并自动返回此地址而不管计算机是什么?假设我将其部署到不同的计算机上.

smalltalk seaside pharo gnu-smalltalk pharo-5

3
推荐指数
1
解决办法
122
查看次数

smalltalk 中的二分搜索

Array extend [
   Array class >> bin: val left: l right: r [
      ^ super binSearch: val left: l right: r
   ]

   binSearch: val left: l right: r [
      |arr iter|
      arr := self.
      [l == r]
         ifTrue: [^ (-1)].
      iter := (r + l)/2.
      [arr at: iter == val]
         ifTrue: [^iter].
      [arr at: iter < val]
         ifTrue:[^ super binSearch val left: l right: iter]
         ifFalse: [^ super binSearch val left: iter right: r]
   ]
]
arr := #(3 6 …
Run Code Online (Sandbox Code Playgroud)

smalltalk gnu-smalltalk

3
推荐指数
1
解决办法
168
查看次数

Smalltalk斐波那契

我必须使用Smalltalk返回第n 斐波那契数,我以前没有使用过这种语言。该程序将1返回到任何输入,我不知道为什么。我认为它甚至没有迭代for循环。有人可以帮我吗?谢谢。

'Which fibonacci number do you want? (n>2)' printNl.
n := stdin nextLine asInteger.

(n <= 2)
    ifTrue: ['Type a larger number, F(1) and F(2) equals 1!' displayNl.]
    ifFalse: [  
        result:= 1.
        parent := 1.
        gparent := 1.   
        2 to: n do: [ :i | [
                result := (parent + gparent).
                gparent := parent.
                parent := result.
                'come on, do something' displayNl.
            ]
        ].
        result displayNl.
    ].
Run Code Online (Sandbox Code Playgroud)

syntax for-loop smalltalk gnu-smalltalk

2
推荐指数
3
解决办法
1554
查看次数

在Smalltalk中,如果x是一个数组,并且x at:3 put:123将起作用,那么(x at:3)+ 1如何工作?

也就是说,如果我们将其视为所有对象和消息,那么

"Did this earlier:    x := Array new: 20"
x at: 3 put: 123      "this will put 123 into slot 3"
Run Code Online (Sandbox Code Playgroud)

只有在x at: 3像"单元格"对象一样返回时才能工作,所以单元格可以接收一个Interger对象,即123.(或者,这样单元格对象可以让一些myContent属性指向123对象)

那么在这种情况下,怎么可能

y := (x at: 3) + 567
Run Code Online (Sandbox Code Playgroud)

工作?因为单元格如何处理+消息?是不是以某种方式,单元格对象认为它不知道如何处理+消息,所以它查看其内容(可能是类似的东西self myContent),然后返回它?它是如何工作的?我想知道是否有一个设计模式名称.

smalltalk gnu-smalltalk

2
推荐指数
2
解决办法
120
查看次数

如何使用作为数组的实例变量

我想创建一个smalltalk应用程序,其中一个类具有一个实例变量,该实例变量是一个数组,一个实例变量是数组的大小.理想情况下,我希望在创建对象时初始化这些对象,但我会在方法中手动初始化这些对象.

以下是我的代码:

Object subclass: Student [
    | numTests marks |


    initialize [
        numTests := 0.
        marks := Array new: 10.
    ]
]
student := Student new.
student initialize.
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

Object: Array new: 10 "<0x10b054b80>" error: method is responsibility of a subclass
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

arrays smalltalk gnu-smalltalk

2
推荐指数
1
解决办法
167
查看次数

如何在GNU Smalltalk中添加具有2个不同名称的相同方法?

如何让一个类使用2个不同的名称公开相同的方法?

例如,该asDescripton函数执行相同的操作/重新导出该asString函数,而无需简单地复制粘贴代码。

Object subclass: Element [
  | width height |

  Element class >> new [
    ^super new init.
  ]

  init [
    width := 0.
    height := 0.
  ]

  asString [
    ^ 'Element with width ', width, ' and height ', height.
  ]

  asDescription [ "???" ]
]
Run Code Online (Sandbox Code Playgroud)

smalltalk gnu-smalltalk

2
推荐指数
1
解决办法
70
查看次数

标签 统计

gnu-smalltalk ×10

smalltalk ×10

arrays ×1

for-loop ×1

pharo ×1

pharo-5 ×1

seaside ×1

squeak ×1

syntax ×1