This makes sense now.
Thanks for clarifying the issue Esteban. Much appreciated
J

 

 

From: pharo-users-bounces@lists.gforge.inria.fr [mailto:pharo-users-bounces@lists.gforge.inria.fr] On Behalf Of Esteban Lorenzano
Sent: Saturday, March 23, 2013 3:23 PM
To: A friendly place where any question about pharo is welcome
Subject: Re: [Pharo-users] Method Calling Inside Nested Blocks

 

yes, you need to end the statement (with a dot), then add the receiver.

 

btw... the compiler will not complain if you do not put a dot, but your code will not work, because the compiler will interpret that you are sending the message AfterDOCTYPENameState to the object "false"... and then when you reach that place in your execution, you will have a doesNotUnderstand error :)

 

Esteban

 

On Mar 23, 2013, at 2:14 PM, "Mohammad Al Houssami (Alumni)" <mha53@mail.aub.edu> wrote:



Probably because I am not using dots except at the end of blocks which I think is wrong. 
This is a sample of what I had earlier:

currentCharacter = CHARACTERTABULATION  ifTrue: [anythingElseBoolean:= false

                AfterDOCTYPENameState value: currentCharacter ].

There should be a dot after false right ? Once I add the dot I get a complain.


 

From: pharo-users-bounces@lists.gforge.inria.fr [mailto:pharo-users-bounces@lists.gforge.inria.fr] On Behalf Of Esteban Lorenzano
Sent: Saturday, March 23, 2013 3:09 PM
To: A friendly place where any question about pharo is welcome
Subject: Re: [Pharo-users] Method Calling Inside Nested Blocks

 

if it is a method, it needs the receiver, in this case "self" (remember, any call in smalltalk is: receiver+message).

If for some weird reason you did not need it before (like some chained call effect), that was just by chance... you just were lucky before :)

 

Esteban

 

On Mar 23, 2013, at 1:58 PM, "Mohammad Al Houssami (Alumni)" <mha53@mail.aub.edu> wrote:




So the method declaration should be self afterDOCTYPEPublicKeywordState: currentCharacter. ?

 

But I have been doing the same for quite some time and I wasn’t getting any complains. This is the first time and the only thing that changed is that I have two blocks in this case. As I said earlier if I move the method call outside the block it works with no complains J

 

I'll change the names of all my methods to camel case. Thanks for that

 

 

From: pharo-users-bounces@lists.gforge.inria.fr [mailto:pharo-users-bounces@lists.gforge.inria.fr] On Behalf Of Esteban Lorenzano
Sent: Saturday, March 23, 2013 2:52 PM
To: A friendly place where any question about pharo is welcome
Subject: Re: [Pharo-users] Method Calling Inside Nested Blocks

 

 

On Mar 23, 2013, at 12:31 PM, "Mohammad Al Houssami (Alumni)" <mha53@mail.aub.edu> wrote:





Hello everyone

 

I was trying to save my method which has the below piece of code

 

anythingElseBoolean = false ifFalse: [

                doctypeString := reader next: 6

                doctypeString asLowercase =  'public'     ifTrue: [

                                AfterDOCTYPEPublicKeywordState value: currentCharacter

                                ]

 

I get a complain that the AfterDOCTYPEPublicKeywordState is unknown even though I have a method with this name. 

 

AfterDOCTYPEPublicKeywordState is a METHOD????

then, you are missing some points:

 

1) it does not conforms conventions (it should start with lowercase)

2) you need a self call

 

so, it would be like this:

 

self afterDOCTYPEPublicKeywordState value: currentCharacter. 

 

but that is also wrong from a design point of view (anti demeters law). So, you better create a (perhaps private) method who does the assignment. And then you have something like this:

 

self afterDOCTYPEPublicKeywordState: currentCharacter.

 

Esteban





If I move the method call outside outside the ifTrue block to the ifFalse block it doesn’t complain.

Is the problem because of nested blocks ? If that’s the case then what would be a good work around ?




 

Thanks

Mohammad