[#3741] Re: Why it's quiet -- standard distribution issues — Aleksi Niemel<aleksi.niemela@...>
I think it's the feature of the mailing list archive to create a threads of
[#3756] RE: XMP on comments — Aleksi Niemel<aleksi.niemela@...>
> require "xmp"
[#3766] modulo and remainder — Dave Thomas <Dave@...>
[#3776] Kernel.rand — Aleksi Niemel<aleksi.niemela@...>
How about defining:
[#3781] Widening out discussions — Dave Thomas <Dave@...>
[#3795] Re: Array.uniq! returning nil — Aleksi Niemel<aleksi.niemela@...>
> As matz said in [ruby-talk:3785] and Dave said in [ruby-talk:1229],
Hi, Aleksi,
[#3823] Re: Array.pick — Aleksi Niemel<aleksi.niemela@...>
> > Just a general comment--a brief statement of purpose and using
[#3827] JRuby? — Aleksi Niemel<aleksi.niemela@...>
Is there or will there be Ruby equivalent of JPython?
[#3882] Re: Array.uniq! returning nil — Aleksi Niemel<aleksi.niemela@...>
> |look too strange, confusing, or cryptic. Maybe just @, $, %, &.
Hi,
[#3918] A question about variable names... — Dave Thomas <Dave@...>
[#3935] If your company uses Pallets, Skids, Boxes, Lumber, etc. — pallets2@...
[#3956] Tk PhotoImage options — andy@... (Andrew Hunt)
Hi all,
[#3971] Thread and File do not work together — "Michael Neumann" <neumann@...>
following example do not work correctly with my ruby
[#3986] Re: Principle of least effort -- another Ruby virtue. — Andrew Hunt <andy@...>
> Principle of Least Effort.
Hi,
[#4005] Re: Pluggable functions and blocks — Aleksi Niemel<aleksi.niemela@...>
Aleksi makes a question:
[#4008] Ruby installation instructions for Windows — Aleksi Niemel<aleksi.niemela@...>
I had to write these instructions for my friends. I thought it might be nice
[#4043] What are you using Ruby for? — Dave Thomas <Dave@...>
On 15 Jul 2000 22:08:50 -0500,
Hi,
[#4057] Re: What are you using Ruby for? — Aleksi Niemel<aleksi.niemela@...>
Johann:
[#4082] Re: What are you using Ruby for? — Aleksi Niemel<aleksi.niemela@...>
[#4091] 'each' and 'in' — hal9000@...
I just recently realized why the default
[#4107] Re: 'each' and 'in' -- special char problem? — schneik@...
[#4114] Method signature - a question for the group — Dave Thomas <Dave@...>
[#4139] Facilitating Ruby self-propagation with the rig-it autopolymorph application. — Conrad Schneiker <schneik@...>
Hi,
[#4158] Getting Tk to work on Windows — "Michael Neumann" <neumann@...>
Hi....
[#4178] Partly converted English Ruby/Tk widget demo working. — Conrad Schneiker <schneik@...>
Hi,
[#4234] @ variables not updated within method? — Hugh Sasse Staff Elec Eng <hgs@...>
Hugh Sasse Staff Elec Eng <hgs@dmu.ac.uk> writes:
On 27 Jul 2000, Dave Thomas wrote:
[#4267] Ruby.next, Perl6, Python 3000, Tcl++, etc. -- Any opportunities for common implementation code? — "Conrad Schneiker" <schneiker@...>
Hi,
"Conrad Schneiker" wrote:
[ruby-talk:04171] Re: Basic variable question
>>>>> "J" == Johann Hibschman <johann@physics.berkeley.edu> writes:
J> go in some namespace, right? If I defined a class in test.rb and
J> loaded it, the name of that class would be inserted into the global
J> namespace,
When you define a class or a module, ruby will define a constant variable
with the same name.
For example, if you have this file :
class Toto
end
module Tutu
class Titi
end
end
and you want to retrieve the VALUE associated for each class and module in
C, you must write :
tt_cToto = rb_const_get(rb_cObject, rb_intern("Toto")); # class Toto
tt_mTutu = rb_const_get(rb_cObject, rb_intern("Tutu")); # module Tutu
tt_cTiti = rb_const_get(tt_mTutu, rb_intern("Titi")); # class Titi in Tutu
i.e. Titi is defined in Tutu, not in the global namespace.
J> but simple variables are not, correct?
yes, look at parse.y. When ruby see the keyword 'class', 'module', 'def'
it will create a new local_table (local variable are stored in this
table). For example for a class (my comment are in /* */)
| kCLASS cname superclass
{
if (cur_mid || in_single)
yyerror("class definition in method body");
class_nest++;
/*
new constant variable
*/
cref_push();
/*
new local table for local variables
*/
local_push();
}
compstmt
kEND
{
/*
it create a node for the new class
*/
$$ = NEW_CLASS($2, $5, $3);
/*
if you look at node.h you'll see for NEW_CLASS
#define NEW_CLASS(n,b,s) rb_node_newnode(NODE_CLASS,n,NEW_CBODY(b),(s))
#define NEW_CBODY(b) (cur_cref->nd_body=NEW_SCOPE(b),cur_cref)
#define NEW_SCOPE(b) rb_node_newnode(NODE_SCOPE,local_tbl(),cur_cref,(b))
i.e. with NEW_CLASS ruby will create a node NODE_SCOPE where are stored
the local table (which contain the local variable), and a reference
to the constant variable
*/
fixpos($$, $3);
/*
retrieve the old table for local variable
*/
local_pop();
/*
retrieve the old reference for constant variable
*/
cref_pop();
class_nest--;
}
J> --
a last point : this is at *compile* time that ruby resolve a reference to
a local variable.
The example given in the FAQ, with my comment :
for i in 1..2 ======> new local variable `i' stored in local_table
if i == 2 ======> ruby search a local variable `i' and find it
print a ======> ruby search a local variable `a', and don't
======> find it, this is resolved at *compile* time
======> print a()
else
a = 1 ======> new local variable `a' stored in local_table
end
end
A more complete example :
pigeon% cat b.rb
#!/usr/bin/ruby
def a
"I'm in a()\n"
end
for i in 1..2
print "i = #{i}\n"
if i == 2
print "\tbefore the initialization of a : "
print a
else
a = 1
end
print "\tafter the initialization of a : "
print a
print "\n"
end
pigeon%
pigeon% b.rb
i = 1
after the initialization of a : 1
i = 2
before the initialization of a : I'm in a()
after the initialization of a : 1
pigeon%
Guy Decoux