块和ifTrue语句

Oha*_*had 0 smalltalk squeak

我想创建一个方法,将块作为参数获取,块也获取参数.如果块返回true,它应该执行某些操作(例如返回1),如果返回false,则应该执行其他操作.

这就是我所做的..但我在ifTrue上得到语法错误...这是我应该得到一个接收参数的块作为参数的方式吗?

Mymethod: Block

Block value: 'argument'
ifTrue: [ ^1]. 
ifFalse: [^2].
Run Code Online (Sandbox Code Playgroud)

以及对方法的调用:

object := myClass new.
argument :=1
boolValue := object Mymethod : [:argument | argument ==1 ]
Run Code Online (Sandbox Code Playgroud)

Uko*_*Uko 5

你写它的方式意味着#value:ifTrue:消息到块,然后你发送#ifFalse:消息到没有(这根本不可能.如果你想在一行中,你应该使用括号:

(Block value: 'argument')
  ifTrue: [ ^1]
  ifFalse: [^2]
Run Code Online (Sandbox Code Playgroud)

同样在smalltalk中,使用非大写的命名变量是一种惯例,如blockaBlock

  • @Shiran,再次,我正在使用[tag:pharo],这是[tag:squeak]的一个分支.您可以在此处阅读有关成功案例的信息:http://pharo.org/success (2认同)