From ruby-talk-admin@ruby-lang.org Fri Dec 16 01:57:52 2005 Received: from kankan.nagaokaut.ac.jp (kankan.nagaokaut.ac.jp [133.44.2.24]) by blade.nagaokaut.ac.jp (8.12.3/8.12.3/Debian-6.6) with ESMTP id jBFGvlZk028490; Fri, 16 Dec 2005 01:57:52 +0900 Received: from funfun.nagaokaut.ac.jp (funfun.nagaokaut.ac.jp [133.44.2.201]) by kankan.nagaokaut.ac.jp (Postfix) with ESMTP id 3F7945A4F; Fri, 16 Dec 2005 01:57:52 +0900 (JST) Received: from localhost (localhost.nagaokaut.ac.jp [127.0.0.1]) by funfun.nagaokaut.ac.jp (Postfix) with ESMTP id EE322F0489C; Fri, 16 Dec 2005 01:57:52 +0900 (JST) Received: from voscc.nagaokaut.ac.jp (voscc.nagaokaut.ac.jp [133.44.1.100]) by funfun.nagaokaut.ac.jp (Postfix) with ESMTP id B5E66F048A1; Fri, 16 Dec 2005 01:57:51 +0900 (JST) Received: from beryllium.ruby-lang.org (beryllium.ruby-lang.org [210.163.138.100]) by voscc.nagaokaut.ac.jp (Postfix) with ESMTP id D49BB63002E; Fri, 16 Dec 2005 01:57:50 +0900 (JST) Received: from beryllium.ruby-lang.org (beryllium.ruby-lang.org [127.0.0.1]) by beryllium.ruby-lang.org (Postfix) with ESMTP id 8417033BEB; Fri, 16 Dec 2005 01:57:49 +0900 (JST) Received: from localhost (beryllium.ruby-lang.org [127.0.0.1]) by beryllium.ruby-lang.org (Postfix) with ESMTP id E531533C16 for ; Fri, 16 Dec 2005 01:57:40 +0900 (JST) Received: from beryllium.ruby-lang.org ([127.0.0.1]) by localhost (beryllium.ruby-lang.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 03911-06 for ; Fri, 16 Dec 2005 01:57:40 +0900 (JST) Received: from sinus.lauschmusik.de (sinus.lauschmusik.de [213.95.32.201]) by beryllium.ruby-lang.org (Postfix) with ESMTP id 6D9F133BEB for ; Fri, 16 Dec 2005 01:57:40 +0900 (JST) Received: from localhost ([127.0.0.1] helo=localhost.localdomain) by sinus.lauschmusik.de with esmtp (Exim 4.50) id 1EmwNi-0004j2-7W for ruby-talk@ruby-lang.org; Thu, 15 Dec 2005 17:55:02 +0100 Received: from z14g2000cwz.googlegroups.com (z14g2000cwz.googlegroups.com) by sinus.lauschmusik.de with NTTP id 166232 for ; Thu Dec 15 17:55:02 CET 2005 Received: from [217.206.116.210] by z14g2000cwz.googlegroups.com (unknown) with NNTP id 166232 for ; Thu Dec 15 17:55:02 CET 2005 Received: from Usenet via a Usenet to mail gateway located at lauschmusik.de. This service provided as a courtesy to the ruby-talk mailing list. If this message is SPAM, its ultimate origin is Usenet, not this gateway program. All subscribers to the ruby-talk mailing list agree to receive the Usenet postings made to comp.lang.ruby via this gateway. Please see http://www.ruby-lang.org/ruby-talk-usenet-policy.html. Delivered-To: ruby-talk@ruby-lang.org Date: Fri, 16 Dec 2005 01:57:41 +0900 Posted: 15 Dec 2005 08:56:14 -0800 From: ajmayo@my-deja.com Reply-To: ruby-talk@ruby-lang.org Subject: Assigning a block to a variable in Ruby To: ruby-talk@ruby-lang.org (ruby-talk ML) Message-Id: <1134665773.927049.245200@z14g2000cwz.googlegroups.com> X-ML-Name: ruby-talk X-Mail-Count: 64 X-MLServer: fml [fml 4.0.3 release (20011202/4.0.3)]; post only (only members can post) X-ML-Info: If you have a question, send e-mail with the body "help" (without quotes) to the address ruby-talk-ctl@ruby-lang.org; help= User-Agent: G2/0.2 X-Original-To: ruby-talk@ruby-lang.org Path: noris.net!news.n-ix.net!news.rh-tec.net!tiscali!newsfeed1.ip.tiscali.net!proxad.net!216.239.36.134.MISMATCH!postnews.google.com!z14g2000cwz.googlegroups.com!not-for-mail Newsgroups: comp.lang.ruby Organization: http://groups.google.com NNTP-Posting-Host: 217.206.116.210 X-Trace: posting.google.com 1134665781 4924 127.0.0.1 (15 Dec 2005 16:56:21 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Thu, 15 Dec 2005 16:56:21 +0000 (UTC) X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5,gzip(gfe),gzip(gfe) Complaints-To: groups-abuse@google.com Injection-Info: z14g2000cwz.googlegroups.com; posting-host=217.206.116.210; posting-account=adTdjQwAAADKqKsPV5nvjlhw90gy8QGa X-From-Usenet: see Received: header above. X-rubymirror: yes X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ruby-lang.org X-Spam-Checker-Version: SpamAssassin 3.0.3 (2005-04-27) on beryllium.ruby-lang.org X-Spam-Level: X-Spam-Status: No, score=-5.7 required=7.0 tests=BAYES_00, CONTENT_TYPE_PRESENT,MSGID_FROM_MTA_HEADER,NO_REAL_NAME,QENCPTR1, RCVDFRMLOCALIP autolearn=no version=3.0.3 Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Precedence: bulk Lines: 56 List-Id: ruby-talk.ruby-lang.org List-Software: fml [fml 4.0.3 release (20011202/4.0.3)] List-Post: List-Owner: List-Help: List-Unsubscribe: X-Virus-Scanned: by AMaViS snapshot-20020531 I am new to Ruby and curious as to how you emulate the following Javascript snippet (example in Windows, hence the call to Echo) var a = function(p) {WScript.Echo(p)} bar(a); function bar(z) { z(1); WScript.Echo(z); } which would of course create an anonymous function, assign it to variable a, pass this as a parameter to function bar() and then evaluate the function with parameter 1, then attempt to print the function itself (which Javascript will do, printing the text of the block) I found Ruby quite intuitive until I tried a = {some block} and found that this of course doesn't work as in this context {} refers to a hash. Ok, that's fine, but the 'yield' statement seems very funky and Perlish to me. Effectively a block passed to a routine exists as a 'hidden' argument so that foo(100) {someblock} in Ruby passes one parameter explicitly (as we would see from foo's defined argument list) and a 'hidden' block which 'yield' inside the body of foo() would evaluate. (though, oddly, yield {someblock} is also not valid Ruby). This seems horribly inelegant for a language touted as being The Next Great Thing. It is also unclear, how, then, I pass down a block as an argument and then in turn pass it again to a child routine. I can see how a parameter to a block works - this is clearly borrowed from Smalltalk - but Javascript doesn't enforce separation of dynamic code in the way Ruby appears to. At present Javascript's syntax looks much cleaner. Am I missing something? Also, I presume Ruby is a forward-referencing language only, unlike Javascript, where I can declare a function after code which calls it. Ruby didn't seem to like that much.