Bonjour,
je rencontre un petit problème de compréhension (de débutant c'est sur).
Voila un morceau de code :
| myImage pixelsValues | myImage := ImageMorph new. pixelsValues := myImage imageForm tallyPixelValues. Transcript show: pixelsValues size; cr. (pixelsValues select: [ :each | each > 0]) do: [ :each | Transcript show: each; show: ' '.]. (pixelsValues collect: [ :each | each > 0]) do: [ :each | Transcript show: each; show: ' '.].
pixelsValues renvoie un bitmap (qui est une Collection)
pourquoi collect: sur le bitmap me renvoie une erreur ?
Error : improper store into indexable object
select par contre fonctionne 'normalement'
Merci d'éclairer ma lanterne de débutant (mais je m'accroche :) )
Cordialement,
Bonjour,
le select et le collect fonctionne differemment.
pixelsValues select: [ :each | each > 0]
retourne les éléments de pixelsValues pour lesquels each>0 s'évalue à true.
pixelsValues collect: [ :each | each > 0]
renvoie la collection des resultats des évalutions each>0 , donc une collection de booléens.
voila pour la différence entre collect et select. si je ne me trompe pas (j'ai passe la journee dans eclipse, je suis apte a dire des betises tres grosses!!)
Mais je ne pourrais pas expliquer le bug , jen 'ai pas squeak sous la main pour tester.
HTH,
Yann
FERRERE Frédéric a écrit :
Bonjour,
je rencontre un petit problème de compréhension (de débutant c'est sur).
Voila un morceau de code :
| myImage pixelsValues | myImage := ImageMorph new. pixelsValues := myImage imageForm tallyPixelValues. Transcript show: pixelsValues size; cr. (pixelsValues select: [ :each | each > 0]) do: [ :each | Transcript show: each; show: ' '.]. (pixelsValues collect: [ :each | each > 0]) do: [ :each | Transcript show: each; show: ' '.].
pixelsValues renvoie un bitmap (qui est une Collection)
pourquoi collect: sur le bitmap me renvoie une erreur ?
Error : improper store into indexable object
select par contre fonctionne 'normalement'
Merci d'éclairer ma lanterne de débutant (mais je m'accroche :) )
Cordialement,
Bonjour,
A mon avis le "bug" vient du fait que la méthode collect: créer une nouvelle collection du même type que le receveur courant (ici un Bitmap) afin de stocker les valeurs obtenues en évaluant le block.
Donc,
pixelsValues collect: [ :each | each > 0]
essaie de construire un bitmap en lui insérant des booléens ce qui ne fonctionne pas.
Par contre:
pixelsValues collect: [ :each | each * 2]
fonctionne.
Luc.
Yann Monclair a écrit :
Bonjour,
le select et le collect fonctionne differemment.
pixelsValues select: [ :each | each > 0]
retourne les éléments de pixelsValues pour lesquels each>0 s'évalue à true.
pixelsValues collect: [ :each | each > 0]
renvoie la collection des resultats des évalutions each>0 , donc une collection de booléens.
voila pour la différence entre collect et select. si je ne me trompe pas (j'ai passe la journee dans eclipse, je suis apte a dire des betises tres grosses!!)
Mais je ne pourrais pas expliquer le bug , jen 'ai pas squeak sous la main pour tester.
HTH,
Yann
FERRERE Frédéric a écrit :
Bonjour,
je rencontre un petit problème de compréhension (de débutant c'est sur).
Voila un morceau de code :
| myImage pixelsValues | myImage := ImageMorph new. pixelsValues := myImage imageForm tallyPixelValues. Transcript show: pixelsValues size; cr. (pixelsValues select: [ :each | each > 0]) do: [ :each | Transcript show: each; show: ' '.]. (pixelsValues collect: [ :each | each > 0]) do: [ :each | Transcript show: each; show: ' '.].
pixelsValues renvoie un bitmap (qui est une Collection)
pourquoi collect: sur le bitmap me renvoie une erreur ?
Error : improper store into indexable object
select par contre fonctionne 'normalement'
Merci d'éclairer ma lanterne de débutant (mais je m'accroche :) )
Cordialement,
squeak-fr@lists.squeakfoundation.org