在Smalltalk中定义双大于号(>;)的方法

在Smalltalk中定义双大于号(>;)的方法,smalltalk,gnu-smalltalk,Smalltalk,Gnu Smalltalk,在Kent Beck的书中,双大号(>)用于定义如下方法: Point class extend [ x: xNumber y: yNumber [ ^self new setX: xNumber y: yNumber ] ] Point extend [ setX: xNumber y: yNumber [ x := xNumber. y := yNumber. ^

在Kent Beck的书中,双大号(
>
)用于定义如下方法:

Point class extend [
    x: xNumber y: yNumber [
        ^self new
            setX: xNumber
            y: yNumber ]
]

Point extend [
    setX: xNumber y: yNumber [
        x := xNumber.
        y := yNumber.
        ^self ]
]
点类>>x:xNumber y:yNumber
^自我更新
setX:xNumber
y:yNumber
点>>设置x:xNumber y:yNumber
x:=xNumber。
y:=yNumber。
^自我
但是,我无法在GNU Smalltalk中运行它


它在Smalltalk的某些实现中是否有效?或者它只是一种伪代码?

事实上,这是伪代码

在其他语言中,您可以使用
告诉人们该方法在这个类中,但在smalltalk中,您可以编写
>

在闲聊中你会做什么

  • 打开系统浏览器
  • klick on class,一个按钮将显示该类的类侧
  • 将该方法与源代码一起粘贴到文本区域:

    x: xNumber y: yNumber
        ^self new
            setX: xNumber
            y: yNumber
    
  • Strg-s来保存代码

  • 为了

    您也可以这样做,但不使用类端

    ,请注意,#>>确实是一条可以发送给类的消息,它基本上可以访问符号的方法字典(选择器参数)。请参阅,行为类,方法>>

      >> selector 
    "Answer the compiled method associated with the argument, selector (a 
    Symbol), a message selector in the receiver's method dictionary. If the 
    selector is not in the dictionary, create an error notification."
    
    ^self compiledMethodAt: selector
    
    所以你可以做,例如(检查)

    但是请注意,我们在这里发送#class,因为#x:y:是一个类端方法。如果要访问实例端方法,比如#normalized,则可以执行以下操作:

      Point >> #normalized
    

    GNU Smalltalk的正确语法如下所示:

    Point class extend [
        x: xNumber y: yNumber [
            ^self new
                setX: xNumber
                y: yNumber ]
    ]
    
    Point extend [
        setX: xNumber y: yNumber [
            x := xNumber.
            y := yNumber.
            ^self ]
    ]
    
    有关GNU Smalltalk语法的更多信息,请参阅

      Point >> #normalized
    
    Point class extend [
        x: xNumber y: yNumber [
            ^self new
                setX: xNumber
                y: yNumber ]
    ]
    
    Point extend [
        setX: xNumber y: yNumber [
            x := xNumber.
            y := yNumber.
            ^self ]
    ]