# [Newbies] understanding selectors

Levente Uzonyi leves at elte.hu
Sun Jul 31 23:54:34 UTC 2011

```Hi Jonathan,

On Sat, 30 Jul 2011, Jonathan Wright wrote:

snip

> perform: anOpperator with: aMatrix
> 	| newMatrix rowCount columnCount result |
> 	rowCount := self rowCount.
> 	columnCount := self columnCount.
> 	newMatrix := Matrix rows: rowCount columns: columnCount.
>
> 	1 to: rowCount do: [ :selectRow |
> 		1 to: columnCount do: [ :selectColumn |
> 		result := (self at: selectRow at: selectColumn)
> perform: anOpperator with: (aMatrix at: selectRow at: selectColumn).
> 		newMatrix at: selectRow at: selectColumn put: result.]].
> 	^newMatrix.

It's not such a good idea, to override #perform:with:, because your Matrix
(and all other Matrix instances) will behave differently.

But you can use #with:collect: to achieve what you'd like to. A few
examples:

In methods:

+ aMatrix

^self with: aMatrix collect: [ :each :other | each + other ]

- aMatrix

^self with: aMatrix collect: [ :each :other | each - other ]

Directly:

m1 with: m2 collect: [ :each :other | each + other ]

m1 with: m2 collect: [ :each :other | each - other ]

Or the tricky way: (which relies on Symbol >> #value:value:)

m1 with: m2 collect: #+

m1 with: m2 collect: #-

Levente

>
>
> where the subtraction/addition looks like this:
> subtractMatrix := matrixOne perform: #- with: matrixTwo.
> _______________________________________________
> Beginners mailing list
> Beginners at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/beginners
>
```