[#30589] [Bug #3391] Use single exclamation mark instead of double exclamation mark for IRB — Diego Viola <redmine@...>

Bug #3391: Use single exclamation mark instead of double exclamation mark for IRB

10 messages 2010/06/04

[#30672] [Bug #3411] Time.local 1916,5,1 #=> 1916-04-30 23:00:00 +0100 — Benoit Daloze <redmine@...>

Bug #3411: Time.local 1916,5,1 #=> 1916-04-30 23:00:00 +0100

12 messages 2010/06/08

[#30699] [Bug #3419] 1.9.2-preview3 possible bug with Rails 3 active_record sqlite_adapter — Joe Sak <redmine@...>

Bug #3419: 1.9.2-preview3 possible bug with Rails 3 active_record sqlite_adapter

9 messages 2010/06/09

[#30734] [Bug #3428] ri outputs ansi escape sequences even when stdout is not a tty — caleb clausen <redmine@...>

Bug #3428: ri outputs ansi escape sequences even when stdout is not a tty

11 messages 2010/06/11

[#30756] [Feature #3436] Spawn the timer thread lazily — Maximilian Gass <redmine@...>

Feature #3436: Spawn the timer thread lazily

15 messages 2010/06/13
[#32686] [Ruby 1.9-Feature#3436] Spawn the timer thread lazily — Mark Somerville <redmine@...> 2010/10/04

Issue #3436 has been updated by Mark Somerville.

[ruby-core:30922] Re: able to re-require $0

From: Benoit Daloze <eregontp@...>
Date: 2010-06-27 14:56:14 UTC
List: ruby-core #30922
Hi,

Sorry to "dig up" this thread, but I changed my mind about it, and
intend to report this as a bug.

I think, however, it is better to speak here first.

On 22 January 2010 14:59, Yusuke ENDOH <mame@tsg.ne.jp> wrote:
> Roger Pack wrote:
>>
>> Currently with 1.9.x you cannot "re-require" a file, even if you pass
>> it a different relative path.
>>
>> However, I did notice that you can "re-require" $0
>> ex:
>>
>> bad.rb:
>>  require $0
>>
>> Is this a bug, then?
>> -r
>>
> [...]
> ... Ah, I get Roger's point now.
>
>
> bad.rb:
> equire $0
>  :foo
>
> $ ruby19 ./bad.rb
> :foo
> :foo
>
> Yusuke ENDOH <mame@tsg.ne.jp>

So the problem is the "main" script is not "loaded" in $", and can
then cause large annoyance.

Of course, no one would probably ever "require {$0,__FILE__,name_of_this_file}"

But, for flexibility and other reasons, many people use something like:
Dir[File.join(File.dirname(__FILE__), "*.rb")].each { |f| require f }
or maybe
Dir[File.expand_path("../*.rb", __FILE__)].each { |f| require f }

This is clearly cleaner than sometimes dozens of requireS.

When you think it could require itself, you may think to add this:
Dir[File.expand_path("../*.rb", __FILE__)].each { |f| require f unless
f == __FILE__ }

But, if another script require this one, __FILE__ may not be absolute,
which obligate you to use:
Dir[File.expand_path("../*.rb", __FILE__)].each { |f| require f unless
File.identical?(f, __FILE__) }

Now, I think I all got you upset, because the wrapping becomes bad,
and this line is way too long for what it does.
(and in Java this is 0 characters, here in Ruby it is about 100 !)

Well, my script hierarchy is probably not the best,
and anyone could do better if he creates some directory and then use
Dir::[] which doe not include the file it is written in.

But, I believe using some scripts in the same directory is the first
and natural structure
 when you just want to separate a little your code.

I also think we could do so much better with require_relative (though
it would not be compatible with 1.8).
Something in the lines of:
  require_relative '*.rb'
  require_relative 'dir/*.rb'
  require_relative '**/*.rb'

This would be *really* nice, at least to me.

( The only disadvantage I see of loading 'dynamically' scripts is you
do not control the load order. But this is often not a problem, as all
the code in the methods are evaluated only when everything is loaded.
Only constants and code outside methods can cause some problems )

Do you share my thoughts?

P.S.: I just got the problem now, so please excuse me if I am speaking too hard.

Benoit Daloze

In This Thread

Prev Next