Blocks and ifTrue statement

668 Views Asked by At

I want to create a method that gets a block as an argument, and the block gets a parameter as well. If the block returns true it should do something ( for example return 1), and if it returns false it should do something else.

this is what I did.. but I am getting syntax error on the ifTrue... is this the way I should get as a parameter a block that receives an argument?

Mymethod: Block

Block value: 'argument'
ifTrue: [ ^1]. 
ifFalse: [^2].

and the call to the method :

object := myClass new.
argument :=1
boolValue := object Mymethod : [:argument | argument ==1 ]
1

There are 1 best solutions below

9
On BEST ANSWER

the way you wrote it means that #value:ifTrue: message to the Block, and then you are sending #ifFalse: message to nothing (which is not possible at all. If you want to do it in one line, you should use parenthesis:

(Block value: 'argument')
  ifTrue: [ ^1]
  ifFalse: [^2]

Also in smalltalk it's a convention to name variables with uncapitalized, like block or aBlock