--rwEMma7ioTxnRzrJ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On 2007-06-20 07:37:14 +0900 (Wed, Jun), Daniel Martin wrote: > On the other hand, I find the idea that the scoping and binding of > variables could change based on the particular code path followed at > run time a horribly non-intuitive concept, since I think of "variable > scope" as something as static as the code itself - that is, you should > only be able to screw with variable scoping by strange > meta-programming tricks. Maybe I don't understand something, but the decision whether something is a variable or is a method call is based not on the code executed (which is hard to predict when reading the source) but on the code parsed, which is pretty static. def this_method( x ) p y # This 'y' will always be a method call. # (even if you call this_method again) if x y = 1 # because of this line in the source code... end p y # ...this 'y' will always be a variable. end # ..independent on the value of x So, I would (IMHO) assume, that this is not bad-black-magic, but good-and-understandable-white-magic aspect of ruby. The confision may emerge when the block of code has many lines, hard to grasp in one eye shot, but I have been taught that if you write a function that is longer than half of your editor window you should extract part of it into another function. With short blocks it is harder to mistake a method for a variable. P.S.: If someone still does not like this magic behaviour, assume that it saves you from writing: def this_method( x ) p y if x #pragma set_as_variable(y) /* and if you forgot, you will get parse-error */ y = 1 end p y end ;-) -- No virus found in this outgoing message. Checked by 'grep -i virus $MESSAGE' Trust me. --rwEMma7ioTxnRzrJ Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7-ecc0.1.6 (GNU/Linux) iD8DBQFGeSxrsnU0scoWZKARAgWGAKDHXJoSBXQiY6Bsv5GGsDaUjCf/BQCfUCd5 9stzUpzthKhT6KlcNcUxfVQイ ュュュュュナホト ミヌミ モノヌホチヤユメナュュュュュ ュュナヘキヤメハュュ