[#4341] DRY and embedded docs. — Hugh Sasse Staff Elec Eng <hgs@...>
If I have a here document in some ruby program:
[#4347] Re: DATA and rewind. — ts <decoux@...>
>>>>> "H" == Hugh Sasse Staff Elec Eng <hgs@dmu.ac.uk> writes:
[#4350] Re: Thirty-seven Reasons [Hal Fulton] Love[s] Ruby — "David Douthitt" <DDouthitt@...>
[#4396] Re: New Require (was: RAA development ideas (was: RE: Looking for inp ut on a 'links' page)) — Hugh Sasse Staff Elec Eng <hgs@...>
On 9 Aug 2000, Dave Thomas wrote:
[#4411] Re: RAA development ideas (was: RE: Lookin g for inp ut on a 'links' page) — Aleksi Niemel<aleksi.niemela@...>
Me:
On Thu, 10 Aug 2000, [iso-8859-1] Aleksi Niemelwrote:
[#4465] More RubyUnit questions. — Hugh Sasse Staff Elec Eng <hgs@...>
I am beginning to get a feel for this, but I still have a few more
[#4478] Re: RubyUnit. Warnings to be expected? — ts <decoux@...>
>>>>> "H" == Hugh Sasse Staff Elec Eng <hgs@dmu.ac.uk> writes:
[#4481] Invoking an extension after compilation — Dave Thomas <Dave@...>
Hi,
[#4501] What's the biggest Ruby development? — Dave Thomas <Dave@...>
[#4502] methods w/ ! giving nil — Hugh Sasse Staff Elec Eng <hgs@...>
I have got used to the idea that methods that end in '!' return nil if
[#4503] RubyUnit and encapsulation. — Hugh Sasse Staff Elec Eng <hgs@...>
My_class's instance variables are not all "attr :<name>" type variables,
[#4537] Process.wait bug + fix — Brian Fundakowski Feldman <green@...>
If your system uses the rb_waitpid() codepath of rb_f_wait(),
[#4567] Re: What's the biggest Ruby development? — Aleksi Niemel<aleksi.niemela@...>
Dave said:
Robert Feldt <feldt@ce.chalmers.se> writes:
On Sat, 26 Aug 2000, Dave Thomas wrote:
Robert Feldt <feldt@ce.chalmers.se> writes:
On Mon, 28 Aug 2000, Dave Thomas wrote:
Robert Feldt <feldt@ce.chalmers.se> writes:
[#4591] Can't get Tcl/Tk working — Stephen White <steve@...>
I can't get any of the samples in the ext/tk/sample directory working. All
I'm sure looking forwards to buying the book. :)
Stephen White <steve@deaf.org> writes:
On Sun, 27 Aug 2000, Dave Thomas wrote:
Stephen White <steve@deaf.org> writes:
[#4608] Class methods — Mark Slagell <ms@...>
Reading the thread about regexp matches made me wonder about this:
[#4611] mod_ruby 0.1.19 — shreeve@...2s.org (Steve Shreeve)
Shugo (and others),
[#4633] Printing tables — DaVinci <bombadil@...>
Hi.
[#4647] Function argument lists in parentheses? — Toby Hutton <thutton@...>
Hello,
[#4652] Andy and Dave's European Tour 2000 — Dave Thomas <Dave@...>
Hi,
[#4672] calling super from c — Robert Feldt <feldt@...>
[#4699] Double parenthesis — Klaus Spreckelsen <ks@...1.ruhr-uni-bochum.de>
Why is the first line ok, but the second line is not?
[ruby-talk:04457] Re: Few random notes
> > MatchData is not data by itself, it points to $1, $2,... So
> > this doesn't work:
>
> See http://dev.rubycentral.com/articles/re_obj.html
Thanks for nice article.
Missed however the point here a little, while clearing the relationship
between $dollar_variables and the rest of the Ruby.
The point here was that Aleksi is still digging up issues because he's
stupid enough to keep on messing with 1.4 series :).
BTW. You might want add a point to the article. I though exactly what you
did about $1 -variables with
re = /(\d+):(\d+)/
md1 = re.match("Time: 12:34am")
md2 = re.match("Time: 10:30pm")
[ $1, $2 ] # last successful match # -> ["10", "30"]
$~ = md1
[ $1, $2 ] # previous successful match # -> ["12", "34"]
Then I became aware of concurrency in Ruby and made a test. I couldn't make
$1 point anything but the last successful match. *On that thread*!
That means interleaved execution like this.
Thread 1 Thread 2
s =~ /matches foo 1/
<thread 1 loses execution> <thread 2 gets execution turn>
s =~ /matches foo 2/
<thread 1 gets execution turn> <thread 2 loses execution>
p $1 # => "matches foo 1"
<thread 1 loses execution> <thread 2 gets execution turn>
p $1 #=> "matches foo 2"
The program making it clear is here (or does it make anything clear :):
def threadFactory(str)
Thread.start do
s = "matches #{str}"
/(#{s})/.match(s)
p $1
Thread.stop
p $1
end
end
threads = []
4.times do |i|
threads << threadFactory("foo #{i}")
end
threads.each do |t| t.wakeup end
threads.each do |t| t.join end
With the output:
"matches foo 0"
"matches foo 1"
"matches foo 2"
"matches foo 3"
"matches foo 3"
"matches foo 2"
"matches foo 1"
"matches foo 0"
The statement of "last successful match" implicates that this is not the
behaviour and all 'p $1' statements on my example should print "matches
bar".
But this is a nitty gritty detail of concurrency, right? Nope. The same
applies to routines too:
def foo(str)
/(foo)/.match(str)
bar(str)
p $1 # the *latest* successful match has happened at bar
end
def bar(str)
/(bar)/.match(str)
p $1
end
foo("foo bar")
Outputting:
"bar"
"foo"
So $globals are not so globals after all. Njaah, I'm just mixing things :).
- Aleksi