[#46105] [ruby-trunk - Feature #6687][Open] Enumerable#with — "merborne (kyo endo)" <redmine@...>

14 messages 2012/07/02

[#46133] [ruby-trunk - Feature #6688][Open] Object#replace — "prijutme4ty (Ilya Vorontsov)" <prijutme4ty@...>

24 messages 2012/07/03

[#46160] [ruby-trunk - Feature #6693][Open] Don't warn for unused variables starting with _ — "marcandre (Marc-Andre Lafortune)" <ruby-core@...>

15 messages 2012/07/04

[#46200] [ruby-trunk - Bug #6702][Open] Date should be either required or not — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>

14 messages 2012/07/05

[#46296] [ruby-trunk - Feature #6717][Open] Method like #instance_eval that returns self (like #tap) — "alexeymuranov (Alexey Muranov)" <redmine@...>

10 messages 2012/07/10

[#46320] [ruby-trunk - Feature #6721][Open] Object#yield_self — "alexeymuranov (Alexey Muranov)" <redmine@...>

25 messages 2012/07/11

[#46339] [ruby-trunk - Bug #6724][Open] waaaaaaant! ( — "zenspider (Ryan Davis)" <redmine@...>

11 messages 2012/07/11

[#46377] [ruby-trunk - Feature #6727][Open] Add Array#rest (with implementation) — "duckinator (Nick Markwell)" <nick@...>

25 messages 2012/07/13

[#46492] [ruby-trunk - Feature #6737][Open] Add Hash#read and alias as #[]. — "trans (Thomas Sawyer)" <transfire@...>

12 messages 2012/07/15

[#46500] [ruby-trunk - Feature #6739][Open] One-line rescue statement should support specifying an exception class — Quintus (Marvin Gülker) <sutniuq@...>

22 messages 2012/07/15

[#46562] [ruby-trunk - Feature #6758][Open] Object#sequence — "merborne (kyo endo)" <redmine@...>

19 messages 2012/07/20

[#46574] [ruby-trunk - Feature #6762][Open] Control interrupt timing — "ko1 (Koichi Sasada)" <redmine@...>

39 messages 2012/07/20

[#46641] [ruby-trunk - Bug #6780][Open] cannot compile zlib module, when cross-compiling. — "jinleileiking (lei king)" <jinleileiking@...>

14 messages 2012/07/23

[#46659] [ruby-trunk - Bug #6783][Open] Infinite loop in inspect, not overriding inspect, to_s, and no known circular references. Stepping into inspect in debugger locks it up with 100% CPU. — "garysweaver (Gary Weaver)" <garysweaver@...>

8 messages 2012/07/23

[#46792] [ruby-trunk - Bug #6799][Open] Digest::*.hexdigest returns an ASCII-8BIT String — "Eregon (Benoit Daloze)" <redmine@...>

11 messages 2012/07/26

[#46799] [ruby-trunk - Feature #6801][Open] String#~ for a here document — "merborne (kyo endo)" <redmine@...>

12 messages 2012/07/27

[#46829] [ruby-trunk - Feature #6806][Open] Support functional programming: forbid instance/class variables for ModuleName::method_name, allow for ModuleName.method_name — "alexeymuranov (Alexey Muranov)" <redmine@...>

7 messages 2012/07/28

[#46832] [ruby-trunk - Bug #6807][Open] Can't compile ruby without ruby — "devcurmudgeon (Paul Sherwood)" <storitel@...>

13 messages 2012/07/28

[#46834] [ruby-trunk - Feature #6808][Open] Implicit index for enumerations — "trans (Thomas Sawyer)" <transfire@...>

15 messages 2012/07/28

[#46838] [ruby-trunk - Bug #6810][Open] `module A::B; end` is not equivalent to `module A; module B; end; end` with respect to constant lookup (scope) — "alexeymuranov (Alexey Muranov)" <redmine@...>

17 messages 2012/07/28

[#46896] (Half-baked DRAFT) new `require' framework — SASADA Koichi <ko1@...>

Hi,

22 messages 2012/07/31

[ruby-core:46705] Re: [ruby-trunk - Feature #4840] Allow returning from require

From: Rodrigo Rosenfeld Rosas <rr.rosas@...>
Date: 2012-07-24 02:47:32 UTC
List: ruby-core #46705
Em 23-07-2012 22:37, SASADA Koichi escreveu:
> (2012/07/23 23:57), Rodrigo Rosenfeld Rosas wrote:
>>> * "return from toplevel" should always discard the argument.
>> You mean "return something", right? I agree. Maybe we could even issue
>> an exception if anything other than just "return" is used.
>>
>>> * What's happen if it returns from the start script (the given
>>>     script to interpreter as a cmdline)?
>>>
>>>     - The argument should be discarded; it does NOT affect the
>>>       process termination status code
>>>
>>>     - The same as "exit", but cannot rescue SystemExit
>> Agreed. Specifically "return" should be equivalent to "exit 0", right?
>> And "return -1" (or any other value, including 0) shouldn't be allowed
>> in my opinion, raising an exception, in which case the return value
>> wouldn't be 0 obviously :)
> matz proposed that ignore return argument completely.  matz also said to
> avoid mistake, return expression with argument (example: "return foo")
> should be syntax error.

Better yet.

>>>     - proc { return }.call in toplevel
>> If it is the main program, "exit" would be the equivalent. Otherwise, no
>> code would be interpreted after the "call" call.
>>
>> I don't understand what makes this so special.
> (1)
>    pr = proc{return}
>    def foo(pr)
>      pr.call # what happen?
>    end

I wonder why someone would write code like this in the first place, but 
if someone did he is probably expecting the program to terminate with 
exit if this is the main file. For required files I have no idea what 
someone would expect from code like this. I'd probably raise an 
exception in such situation because it is most likely a logic error that 
could be hard to debug... I know what you mean, should that method "foo" 
be defined or not? What should be its definition? I have no idea because 
code like this simply doesn't make any sense to me.

> (1')
>    1.times{
>      return
>    }

This one I can think of. But something like:

['a', 'b'].each {|item|
   return if defined? item2module(item)
}

This would simply return from the require. I still don't understand why 
this would be so special.

> (2)
>    # a.rb
>    $pr = proc{return}

Wow! I wouldn't ever think in something like this! Congratulations, 
you're really creative!

Again, why the hell would someone do something like this? I'd just raise 
an error when trying to call $pr because return has no more meaning 
after that file has been already required.

>    # b.rb
>    require './a.rb'
>    $pr.call # waht happen?
>
> (3)
>    begin
>      ...
>    rescue
>      return
>    ensure
>      return
>    end
>
> matz proposed that "accept return on toplevel (not in block, classes, etc)".

I agree, this is way more simple to deal with. Even though I can think 
about someone using an approach like above, he could also rewrite it like:

# ['a', 'b'].each {|item|
#  return if defined? item2module(item)
#}

return if ['a', 'b'].any?{|item|  defined? item2module(item) }

>>> * Matz prefered "return" to "a special exception that require
>>>     and load rescue",
>>>
>>>     - though some people (including ko1) prefered the latter.
>> I'm okay with raising an exception that would be rescued by require,
>> require_relative and load.
>>
>> Actually I guess this is the simpler approach and it fulfills all the
>> real use cases I could think of in this moment.
> I strongly recommended the exception approach because there are *NO*
> difficult corner cases.

Agreed.

> However, matz disagreed the exception approach because of "raise
> StopLoading is too long".  It is a kind of "name is not good".

So it would be just a matter of finding a better name, right? Not that I 
think it should make any difference because ideally only Ruby internals 
should see such errors in my opinion.

But if he thinks StopLoading is too long (while I find it short) it will 
be hard to find a shorter meaningful name I guess.

Maybe after a good night of sleep, who knows...

In This Thread