首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法创建对象的实例

无法创建对象的实例
EN

Stack Overflow用户
提问于 2019-05-01 02:23:22
回答 1查看 38关注 0票数 0

我才刚开始使用gnu-smalltalk。我从这里获取了下面的代码来定义一个类:

代码语言:javascript
复制
Number subclass: Complex [
       | realpart imagpart |
       "This is a quick way to define class-side methods."
       Complex class >> new [
           <category: 'instance creation'>
           ^self error: 'use real:imaginary:'
       ]
       Complex class >> new: ignore [
           <category: 'instance creation'>
           ^self new
       ]
       Complex class >> real: r imaginary: i [
           <category: 'instance creation'>
           ^(super new) setReal: r setImag: i
       ]
       setReal: r setImag: i [ "What is this method with 2 names?"
           <category: 'basic'>
           realpart := r.
           imagpart := i.
           ^self
       ]
   ]

但是,我无法创建该类的任何实例。我尝试过各种方法,下面给出的错误最少!

代码语言:javascript
复制
cn := Complex new: real:15 imaginary:25
cn printNl

错误是:

代码语言:javascript
复制
complexNumber.st:24: expected object

大多数错误如下所示,例如,如果在new关键字之后没有冒号:

代码语言:javascript
复制
$ gst complexNumber.st
Object: Complex error: use real:imaginary:
Error(Exception)>>signal (ExcHandling.st:254)
Error(Exception)>>signal: (ExcHandling.st:264)
Complex class(Object)>>error: (SysExcept.st:1456)
Complex class>>new (complexNumber.st:7)
UndefinedObject>>executeStatements (complexNumber.st:25)
nil

此外,我也不清楚这个有2个名称的方法是什么,每个名称都有一个参数:

代码语言:javascript
复制
setReal: r setImag: i [  "How can there be 2 names and arguments for one method/function?"
    <category: 'basic'>
    realpart := r.
    imagpart := i.
    ^self
]

我认为通常的方法应该只有一个名称和参数,如代码这里

代码语言:javascript
复制
   spend: amount [
       <category: 'moving money'>
       balance := balance - amount
   ]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-01 03:16:19

若要创建Complex编号25 + 25i求值

代码语言:javascript
复制
Complex real: 25 imaginary: 25

我怎么知道?因为你问题的第一部分是

代码语言:javascript
复制
Complex class >> real: r imaginary: i [
       <category: 'instance creation'>
       ^(super new) setReal: r setImag: i
   ]

您的错误是编写不符合Smalltalk语法的Complex new: real: 25 imaginary: 25

带有(比方说)2个(或更多)参数的消息的Smalltalk语法由2个(或更多)关键字组成,以冒号结尾,后面跟着对应的参数。

例如,方法setReal: r setImag: i有两个关键字,即setReal:setImag:,并接收两个参数ri。该方法的名称(在Smalltalk中称为它的选择器)是由于连接关键字而产生的Symbol,在本例中是setReal:setImag:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55930915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档