From: Clemens Hintze Date: 2000-12-10T23:40:02+09:00 Subject: [ruby-talk:7004] Re: block syntax/def syntax question/suggestion >>>>> "Phil" == Phil Tomson writes: Phil> Being very new to Ruby (2-3 days) and very familiar with Then, may I welcome you here? We really appreciate everyone who wants to give it a try :-) Phil> Perl, I tend to prefer { .. } for block delimiters. From Yes ... but see below ... Phil> what I can tell in Ruby you can use either do .. end or { Phil> .. } for blocks. What if that flexibility was also allowed Phil> for method definitions so that you could have: Phil> def somemethod { ... } Phil> in addition to the current syntax: Phil> def somemethod ... end And here is one BIG difference between Ruby and Perl. In Perl the { ... } are merely block delimiters. You are right! And so for Ruby's usage of { ... }. BUT in Ruby a block (let me call it R-BLOCK) is a TOTALLY DIFFERENT thing as a block in Perl (P-BLOCK). A P-BLOCK only groups statements in the source and is only used via compilation stage to determine such groups of statements! R-BLOCKs, however, constitutes REAL OBJECTS that happen to CONTAIN code. Only the R-BLOCKs objects are not DIRECTLY accessible like any other object. You may access them via: yield : Calling an associated block block_given? : Check if an block is associated proc | lambda | Proc.new : Convert a block to a Proc instance &var : - In formal parameter list, convert attached block to a Proc instance and pass that to 'var' - In an actual parameter list, converts a Proc instance back to a R-BLOCK object. Whereby a Proc instance is something similar to Perl's sub reference: sub { ... }; To stress it again, that do ... end and { ... } constitutes REAL objects, that can be dealt with. Statements like 'def', 'if', 'for', etc. that need only statement grouping, but not no R-BLOCK objects, will have the different syntax/convention, that the statement opens the grouping and a corresponding 'end' will close it. You see, no easy way to get Perl's or C/C++'s behavior here! I hope you will anyway find fun with Ruby :-) (...) Phil> Phil \cle