Smalltalk带参数方法的调用方式及定义正确性咨询
关于Smalltalk带参数方法的定义与调用解答
嘿,很高兴帮你理清Smalltalk里带参数方法的使用问题!
一、你的方法定义是否正确?
首先可以明确告诉你:你的bin: n num: k方法定义是完全符合Smalltalk语法的。Smalltalk里的关键字方法就是这样写的——每个参数前都要加冒号,方法名由这些带冒号的关键字组成,这是Smalltalk区别于其他语言的特色之一。
不过有个小细节:你的方法里定义了参数n,但整个方法逻辑里并没有用到它,这可能是笔误?如果是想实现组合数计算(比如C(n,k)),当前的逻辑只做了2的k次方运算,和n无关,你可以后续根据需求调整。
二、如何调用这个带参数的方法?
在Smalltalk里,调用关键字方法的语法和定义是对应的,你只需要按照[对象/类] 关键字1: 参数1 关键字2: 参数2 ...的格式来写就行,具体分两种情况:
1. 如果方法是实例方法(比如加到Object类的实例方法)
假设你把方法定义在Object类里(GNU Smalltalk里可以通过extend来扩展已有类):
Object extend [ bin: n num: k [ | i | i := 1. 1 to: k do:[:j| i := i * 2. ]. ^i ] ]
那么在交互环境里,你可以直接用self来调用(因为交互环境的上下文是Object的实例):
self bin: 4 num: 2. "执行后返回4,因为1*2*2=4"
2. 如果方法是类方法
如果你把它定义成某个类的类方法(比如自定义MathUtils类):
MathUtils class extend [ bin: n num: k [ | i | i := 1. 1 to: k do:[:j| i := i * 2. ]. ^i ] ]
调用时就用类名来触发:
MathUtils bin: 4 num: 2.
3. 直接在GNU Smalltalk命令行测试
你也可以直接在GNU Smalltalk的REPL里先定义方法,再调用,输入完定义代码后,直接敲调用语句就能得到结果。
内容的提问来源于stack exchange,提问作者coder
相关产品推荐
相关产品推荐

