[#319108] Iterator objects and lazy evaluation — Yuh-Ruey Chen <maian330@...>

Two questions:

14 messages 2008/11/01

[#319117] Poor performance of Ruby 1.8.7 when installed with MacPorts — abc <arcadiorubiogarcia@...>

Hi,

15 messages 2008/11/01

[#319176] Ruby for Philosophers — Sebastian Torena <citizenkant@...>

Hi there,

14 messages 2008/11/02

[#319196] ruby1.9: lazy versions of Enumerator#select and friends? — Brian Candler <b.candler@...>

I've been having a play with Enumerators in ruby 1.9, in particular

12 messages 2008/11/02

[#319239] Rake task for building latex? — Stefano Crocco <stefano.crocco@...>

Does anyone know whether there's a rake task to build latex files, including

10 messages 2008/11/03

[#319319] Ruby's take on S.O.L.I.D. — Mike Lopke <reglopke@...>

I'm curious about everyone's take on Bob Martin's S.O.L.I.D. design

16 messages 2008/11/03

[#319401] Combination of numbers in an array that add up to x — Hae Lee <hae.lee.subscription@...>

Objective: Find list of values in an array that adds up to a specific

17 messages 2008/11/04

[#319404] Showing a spinner ? — Aldric Giacomoni <aldric@...>

How do I show a spinner on the command line interface when a ruby script

13 messages 2008/11/04

[#319440] What would you like to know about JRuby? — Charles Oliver Nutter <charles.nutter@...>

Tom Enebo and I are putting together our JRuby presentation for

22 messages 2008/11/04

[#319532] What's the Best Way to Mimic an HTTP Request? — Daniel Miessler <daniel@...>

I'm trying to write a tool that will take a domain as an argument and

10 messages 2008/11/05

[#319546] Ruby has a Face that it wears on its feet — "Jayson Williams" <williams.jayson@...>

In my opinion, Ruby's official face should be Shoes. Shoes gives Ruby

17 messages 2008/11/05
[#319553] Re: Ruby has a Face that it wears on its feet — "Martin DeMello" <martindemello@...> 2008/11/05

On Wed, Nov 5, 2008 at 11:17 AM, Jayson Williams

[#319576] how to quickly find a string towards the end of a large io object — bwv549 <jtprince@...>

How do I scan starting at the end of a big io object to find a string

12 messages 2008/11/06

[#319702] Sudoku Generator (#182) — Matthew Moss <matt@...>

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

14 messages 2008/11/07

[#319769] implementing mvc - using observer pattern - beginner to OOP — Adam Akhtar <adamtemporary@...>

Hi I started making a simple command line todo list application as a way

10 messages 2008/11/08

[#319770] what's easiest way to compare a Float & BigDecimal (i.e. like a equals mechanism) — "Greg Hauptmann" <greg.hauptmann.ruby@...>

Hi,

8 messages 2008/11/08

[#319835] Moving large amount of files, 1.750.000+ — Sebastian Newstream <abeansits@...>

Hello fellow Rubyists!

15 messages 2008/11/09
[#319837] Re: Moving large amount of files, 1.750.000+ — Robert Klemme <shortcutter@...> 2008/11/09

On 09.11.2008 18:04, Sebastian Newstream wrote:

[#319861] Notepad++ (no debug output, using XP) — Ed Hardy <asm.sol@...>

Notepad++ seems to be a great editor for Ruby, in XP Windows. However,

13 messages 2008/11/10

[#319902] Problem with object methods? — Carter Davis <theshakrah@...>

I recently made an object for a game I'm making. It uses the constructor

16 messages 2008/11/10
[#319908] Re: Problem with object methods? — Hugh Sasse <hgs@...> 2008/11/10

[#319911] Re: Problem with object methods? — Carter Davis <theshakrah@...> 2008/11/10

Okay, I made an example.

[#320057] Convert text string i.e 'Peter' into integer ID — Justus Ohlhaver <ohlhaver@...>

Hello,

23 messages 2008/11/12

[#320101] Issue with block and getting to local variables — Tarek Other <cashew250@...>

Ok I'm new to ruby and want to do the following, I want to define a

12 messages 2008/11/12

[#320103] Need tutoring on using a path environment variable — dkmd_nielsen <donn@...>

I don't know what to do. I have an environment variable, PW_PATH,

11 messages 2008/11/12

[#320135] '#' characters are breaking my regexp — Max Williams <toastkid.williams@...>

I'm trying to build a regexp that includes music notes, eg Bb or C#.

14 messages 2008/11/13

[#320202] Highline - question with multiple choices — szimek <szimek@...>

Hi,

14 messages 2008/11/14
[#320208] Re: Highline - question with multiple choices — James Gray <james@...> 2008/11/14

On Nov 14, 2008, at 4:23 AM, szimek wrote:

[#320270] Re: Highline - question with multiple choices — szimek <szimek@...> 2008/11/15

On 14 Lis, 14:52, James Gray <ja...@grayproductions.net> wrote:

[#320213] Unit Conversion (#183) — Matthew Moss <matt@...>

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

37 messages 2008/11/14

[#320280] IO#lineno= doesn't work the way I expected — Chad Perrin <perrin@...>

I'm working on something that operates on each line of a file

22 messages 2008/11/15
[#320283] Re: IO#lineno= doesn't work the way I expected — Tim Hunter <TimHunter@...> 2008/11/15

Chad Perrin wrote:

[#320286] Re: IO#lineno= doesn't work the way I expected — Chad Perrin <perrin@...> 2008/11/15

On Sun, Nov 16, 2008 at 02:27:45AM +0900, Tim Hunter wrote:

[#320287] Re: IO#lineno= doesn't work the way I expected — "Michael Guterl" <mguterl@...> 2008/11/15

On Sat, Nov 15, 2008 at 2:08 PM, Chad Perrin <perrin@apotheon.com> wrote:

[#320288] Re: IO#lineno= doesn't work the way I expected — "Michael Guterl" <mguterl@...> 2008/11/15

On Sat, Nov 15, 2008 at 2:54 PM, Michael Guterl <mguterl@gmail.com> wrote:

[#320359] Why does tmail stop my CGI script form working? — Chad Perrin <perrin@...>

I decided to try TMail for the back end of a new contact page on a

14 messages 2008/11/17

[#320370] How can I overload a method in Ruby — Zhao Yi <youhaodeyi@...>

This is my class definition:

19 messages 2008/11/17

[#320417] How to extract links of a particular class type — "Sita Rami Reddy" <sitaramireddy@...>

I have a web page which has n number of links.

11 messages 2008/11/17

[#320446] function to select only certain key/value pairs from hash? — Aryk Grosz <tennisbum2002@...>

Whenever Im coding I usually come across having to create a new hash

14 messages 2008/11/17

[#320482] I don't like specs, should I change my point of view ? — Zouplaz <user@...>

Hello, I'm not trolling. I don't like specs (RSpec) : everytime I had a

18 messages 2008/11/18

[#320500] Should is the new Must? — Trans <transfire@...>

Why did 'should' become the going nomenclature of BDD framworks?

21 messages 2008/11/18

[#320553] Syntax question from a newbie to Ruby — David Spitzer <davidspitzer@...>

I am just learning Ruby and I can not seem to see why the first example

12 messages 2008/11/18

[#320655] build hash by iterating — Jason Lillywhite <jason.lillywhite@...>

I am building a hash this way:

15 messages 2008/11/19

[#320665] Question about host, gethostbyname and getaddress — Vladimir Fekete <fekete@...>

Hi *,

11 messages 2008/11/19

[#320709] ANN: One-Click Ruby Installer 186-27 Release Candidate 2 — Luis Lavena <luislavena@...>

Hello Ruby for Windows users!

11 messages 2008/11/19

[#320811] Found a ruby bug in the URI class, what do I do? — Ben Johnson <bjohnson@...>

I'm pretty sure this is a bug, and it seem so obvious that I'm thinking

9 messages 2008/11/20

[#320908] Befunge (#184) — Matthew Moss <matt@...>

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

28 messages 2008/11/22
[#321031] Re: [QUIZ] Befunge (#184) — Matthew Moss <matt@...> 2008/11/24

Hopefully the quiz isn't intimidating... It's a fairly simple language

[#321006] Can you run a command line script with arguments, without typing 'ruby' first? — "Jayson Williams" <williams.jayson@...>

Hi All,

29 messages 2008/11/24
[#321008] Re: Can you run a command line script with arguments, without typing 'ruby' first? — "Diogo Lisboa" <diogoslisboa@...> 2008/11/24

chmod a+x my_script (restrict permissions if you want)

[#321022] Re: Can you run a command line script with arguments, without typing 'ruby' first? — "Jayson Williams" <williams.jayson@...> 2008/11/24

I am using win os, so the shabang thing isn't an option for me. I put

[#321023] Re: Can you run a command line script with arguments, without typing 'ruby' first? — "Glen Holcomb" <damnbigman@...> 2008/11/24

On Mon, Nov 24, 2008 at 2:12 PM, Jayson Williams

[#321024] Re: Can you run a command line script with arguments, without typing 'ruby' first? — "Glen Holcomb" <damnbigman@...> 2008/11/24

On Mon, Nov 24, 2008 at 2:21 PM, Glen Holcomb <damnbigman@gmail.com> wrote:

[#321027] Re: Can you run a command line script with arguments, without typing 'ruby' first? — "Jayson Williams" <williams.jayson@...> 2008/11/24

The associations are correct. I reset them just to be sure though. I

[#321095] Re: Can you run a command line script with arguments, without typing 'ruby' first? — Daniel Schömer <daniel.schoemer@...> 2008/11/25

Jayson Williams wrote:

[#321037] Chris Pine tutorial assistance chapter 7 sort data without use of .sort method — jgheal@...

I'm learning to progam and came accross Chris Pine's Ruby Tutorial.

12 messages 2008/11/24

[#321039] Good math/stats libraries for Ruby? — Kenneth McDonald <kenneth.m.mcdonald@...>

There seem to be lots of small stats/math libraries for Ruby, but none

10 messages 2008/11/24

[#321166] time to back peddle? (Ruby 1.8.7) — Trans <transfire@...>

I just updated my Ubuntu system and was a bit surprised to find:

16 messages 2008/11/26

[#321179] How to get a reference to a block (when no explicit block parameter is used?) — Kenneth McDonald <kenneth.m.mcdonald@...>

In a function, I can find out if a block was given using block_given?,

8 messages 2008/11/26

[#321246] Performance issues with large files -- ruby vs. python :) — sa 125 <s_ayalon@...>

Hi all -

16 messages 2008/11/27
[#321248] Re: Performance issues with large files -- ruby vs. python :) — Florian Gilcher <flo@...> 2008/11/27

>

[#321271] Ruby's duck typing — "stephan.zimmer" <stephan.zimmer@...>

I would like to represent certain data by a list; to this end I let

17 messages 2008/11/27

[#321287] Programming Noob Chris Pine Tutorial sorting without use of array.sort method — whisperjim <jgheal@...>

I'm working through the following tutorial http://pine.fm/LearnToProgram/

10 messages 2008/11/27

[#321297] eRuby/erb outside of Rails — Jonny Noog <jonnynoog@...>

Hello,

18 messages 2008/11/28

[#321387] best gui toolkit — Warren Dulnuan <rr3800@...>

What is the best GUI toolkit for Ruby?

32 messages 2008/11/29

[#321421] Anyone scraping dynamic AJAX sites? — Becca Girl <cschall@...>

Hello.

12 messages 2008/11/30

[#321428] Enumerable#select used to return actual values — Mike Austin <"mike[nospam]"@...>

I'm pretty sure select used to use the actual value of the called block,

36 messages 2008/11/30
[#321432] Re: Enumerable#select used to return actual values — Robert Klemme <shortcutter@...> 2008/11/30

On 30.11.2008 04:46, Mike Austin wrote:

[#321906] Re: Enumerable#select used to return actual values — Mark Thomas <mark@...> 2008/12/04

On Nov 29, 10:46m, Mike Austin <"mike[nospam]"@mike-austin.com>

[#321912] Re: Enumerable#select used to return actual values — Trans <transfire@...> 2008/12/04

Re: How to access to local variables in enclosing scopes?

From: Yuh-Ruey Chen <maian330@...>
Date: 2008-11-01 07:59:11 UTC
List: ruby-talk #319106
Replying to multiple posts:

On Oct 31, 5:19 pm, Stefan Lang <perfectly.normal.hac...@gmail.com>
wrote:
> 2008/10/31 Yuh-Ruey Chen <maian...@gmail.com>:
> > On Oct 31, 3:09 pm, Stefan Lang <perfectly.normal.hac...@gmail.com>
> > wrote:
> >> FWIW, Ruby doesn't have nested procedures like that.
>
> > According to my copy of Ruby, it does.
>
> Looks can be deceiving:
>
>     $ cat nest_def.rb
>     class Foo
>       def a
>         puts "in a"
>         def b
>           puts "in b"
>         end
>         b
>       end
>     end
>
>     f = Foo.new
>     p Foo.instance_methods(false)
>     f.a
>     p Foo.instance_methods(false)
>     f.b
>     $ ruby nest_def.rb
>     ["a"]
>     in a
>     in b
>     ["b", "a"]
>     in b
>
> A def inside a method definition defines a method in
> self's class. It is not local to the enclosing method definition.

Wow, I did not realize that. That changes my thinking a lot.

> >> > I am trying to understand Ruby with some metaprogramming practice. But
> >> > I still feel that this is a really backwards step in language design.
>
> >> > It's like telling me I should use GOTO in original BASIC instead of
> >> > trying to bend the language to simulate while loops. Would any sane
> >> > modern programmer do that?
>
> >> I don't think it's a good analogy. Ruby is more oriented towards
> >> little objects and message passing than Pascal-like nested
> >> procedures.
>
> > Then why the first-class code blocks? Certainly makes Ruby a
> > functional language, if only for blocks.
>
> Yes, Ruby has a good deal of functional features and they
> fit in very nicely with the current scoping rules.
>
> Although I'm not sure what you mean with "first class" code
> blocks. The block syntax is actually tied to message passing.

Well, blocks aren't first class per-se, but they can easily be turned
into first-class procs.

> >> I'm sure we could work out an elegant solution to some higher
> >> level goal than "accessing local variables", especially when it
> >> comes to metaprogramming.
>
> > The ability to access local vars in enclosing scopes is strictly
> > unnecessary. But the same could also be said for instance_variable_get/
> > defined?/set.
>
> Ruby does let you access local vars in enclosing scopes. It's
> only that your definition of enclosing scope differs from Ruby's.
>
> Try to write some programs and you'll see it all fits together nicely.
>
> Many design decisions may seem arbitrary. We could also debate
> the whole day about explicit self, assigning to local variables in
> outer scopes, etc. in Python. It's useless.
>
> In the end, you'll find out what looks like a big problem now
> actually isn't. The most important usecase for your desired
> scoping rules would be nested functions, and Ruby doesn't
> have them. And for the other use cases, constants, class-
> and module instance variables suffice. OTOH, you can nest
> blocks as much as you like and scoping is what you expect.

I recognize that access to nonlocal vars can be simulated with
instance variables. It does seem weird to allow two different
paradigms that interact with each other in a confusing - or at the
least non-trivial - matter (just look at my confusion).

I guess my big beef with Ruby is that it is too complex and bloated
with features that often are inconsistent or lack symmetry with each
other. It's too "magical", making it hard to learn exactly how the
language works. From a language design perspective, Ruby really seems
like a mess to me, although with moments of brilliance. Most of the
time, when I'm metaprogramming, I'm guessing and looking at the
output, hoping I got so-and-so quirk correct.

Actually, I think this all could be mitigated to a certain extent if
the documentation for Ruby were improved. I could not find an official
language reference besides the API documentation, which is not
sufficient by itself. Obviously it did not contain much information on
scoping or non-API language features.

On Oct 31, 5:43m, Mike Gold <mike.gold.4...@gmail.com> wrote:
> >> Keep in mind that you are looking at just one side of the coin. There's
> >> a flip side to it. Preventing local variables from willy-nilly
> >> infecting your methods is a Good Thing, and is usually what you want.
>
> > I agree, it's a good thing.
>
> Here you agree, but earlier in the same post you disagree:
>
> Yuh-Ruey Chen wrote:
> > I've also noticed that there is a break in symmetry between |def| and |
> > define_method| besides this block issue. Compare:
>
> The break in symmetry is intentional because it prevents local variables
> from willy-nilly infecting your methods, which you agreed is a good
> thing.

I agreed in the sense that without extra syntax, it would be fragile,
but as my example pointed out, it doesn't necessarily have to be
fragile.

> > These would be functionally equivalent if there were some way,
> > analagous to the former's |self.x|, to access vars in enclosing
> > scopes. I'd argue that such a symmetry would be elegant.
>
> > x = 10
> > def foo
> > x # accessed outside x
> > end
>
> > wouldn't be a good thing, because adding a new method called "x" would
> > ruin it.
>
> > But something like:
>
> > x = 10
> > def foo
> > scope.x
> > end
>
> > would not be as fragile, assuming |scope| is a new builtin method that
> > does what you'd expect it do.
>
> But then you've missed out on the advantage of lexical local variables.
> What you propose takes the "lexical" out of "lexical scope". t is just
> nested variables which are visible from other scopes.

No, what I am proposing is a mechanism for lexical scope. This is what
I mean with that |scope.x| - treat x as if it were from an enclosing
scope.

> >> class Klass
> >> GLOBALS.x
> >> def bar
> >> GLOBALS.x
> >> end
> >> end
>
> >> This makes your intention explicit. If you know python, you've probably
> >> heard the phrase, "Explicit is better than implicit." :)
>
> > Except I do NOT want x to be globally accessible. I just want to to be
> > accessible be child scopes. If I wanted it to be globally accessible,
> > then I would just use global variables.
>
> So don't make it global, as in the Top example above.

But they are not local variables. Local vars for a function are
created each time the function is called. Having access to those local
vars outside of the function makes no sense at all.

On Nov 1, 12:40 am, "ara.t.howard" <ara.t.how...@gmail.com> wrote:
> On Oct 31, 2008, at 3:08 PM, Yuh-Ruey Chen wrote:
>
> > But something like:
>
> > x = 10
> > def foo
> >    scope.x
> > end
>
> > would not be as fragile, assuming |scope| is a new builtin method that
> > does what you'd expect it do.
>
> you can write it yourself now
>
> cfp:~ > cat a.rb
> class C
>    include(
>       Module.new do
>         y = 42
>         def x() y end
>
>        define_method :method_missing do |_|
>          if((_ = local_variables.index(_.to_s)))
>            eval local_variables[_]
>          else
>            super
>          end
>        end
>      end
>    )
> end
>
> p C.new.x
>
> cfp:~ > ruby a.rb
> 42

That's, um, interesting. Less efficient than I hoped, but then again
Ruby is not known for its efficiency. Though that method_missing does
give me an idea...

In This Thread