[#41431] [ruby-trunk - Bug #5694][Open] Proc#arity doesn't take optional arguments into account. — Marc-Andre Lafortune <ruby-core@...>
Maybe we can add a new arity_range method that does this?
On Thu, Dec 1, 2011 at 6:54 PM, Yehuda Katz <wycats@gmail.com> wrote:
You could probably extract the information from #parameters, yeah.
On Thu, Dec 1, 2011 at 11:13 PM, Yehuda Katz <wycats@gmail.com> wrote:
Yeah=85 it would be nice to be able to do:
[#41435] [ruby-trunk - Feature #5695][Open] CoffeeScript "is" and "isnt" keywords — Suraj Kurapati <sunaku@...>
[#41456] [ruby-trunk - Bug #5700][Open] fork {} segfaults during VM cleanup when run inside Fiber — Eric Wong <normalperson@...>
[#41478] [ruby-trunk - Feature #5707][Open] temporary file creation without finalizer and delegate. — Akira Tanaka <akr@...>
Akira Tanaka <akr@fsij.org> wrote:
2011/12/5 Eric Wong <normalperson@yhbt.net>:
[#41496] [ruby-trunk - Bug #5714][Open] Unexpected error of STDIN#read with non-ascii input on Windows XP — Heesob Park <phasis@...>
Hello,
Hello,
Hello,
[#41511] [ruby-trunk - Bug #5719][Open] Hash::[] can't handle 100000+ args — Nick Quaranto <nick@...>
[#41541] [ruby-trunk - Feature #5726][Open] Process::EXIT_SUCCESS and Process::EXIT_FAILURE — Akira Tanaka <akr@...>
[#41557] [ruby-trunk - Bug #5730][Open] Optinal block parameters assigns wrong — Yukihiro Matsumoto <matz@...>
2011/12/9 Yukihiro Matsumoto <matz@ruby-lang.org>:
Hi,
[#41581] [ruby-trunk - Bug #5737][Open] WEBrick doesn't support keep alive connections for 204 and 304 responses — Aaron Patterson <aaron@...>
[#41586] [ruby-trunk - Feature #5741][Open] Secure Erasure of Passwords — Martin Bosslet <Martin.Bosslet@...>
[#41592] My bug evaluation criteria — Marc-Andre Lafortune <ruby-core-mailing-list@...>
I don't think there is an official way to judge a bug, but for me it
[#41594] [ruby-trunk - Bug #5746][Open] Proc#curry too strict about lambda's arity. — Marc-Andre Lafortune <ruby-core@...>
[#41618] [ruby-trunk - Bug #5754][Open] Double require bug in 1.9.3 — Evan Phoenix <evan@...>
[#41630] redmine.ruby-lang.org -> bugs.ruby-lang.org — Shugo Maeda <shugo@...>
Hello,
[#41634] [ruby-trunk - Bug #5759][Open] flatten calls to_ary on everything — Thomas Sawyer <transfire@...>
[#41656] [ruby-trunk - Bug #5763][Open] sprintf not throwing error for wrong number of arguments — NagaChaitanya Vellanki <me@...>
[#41662] [ruby-trunk - Bug #5765][Open] [PATCH] modernize Timeout usage in net/{http,pop,smtp,telnet} — Eric Wong <normalperson@...>
[#41668] [ruby-trunk - Feature #5766][Open] Hash.each_with_object should behave differently when block's arity is 3 — Rodrigo Rosenfeld Rosas <rr.rosas@...>
[#41672] [ruby-trunk - Feature #5767][Open] Cache expanded_load_path to reduce startup time — Yura Sokolov <funny.falcon@...>
[#41681] Documentation of the language itself (syntax, meanings, etc) — Rodrigo Rosenfeld Rosas <rr.rosas@...>
Since Ruby is built on top of simple concepts, most of the documentation
Em 15-12-2011 19:23, Gary Wright escreveu:
On Dec 15, 2011, at 7:39 PM, Rodrigo Rosenfeld Rosas wrote:
Em 19-12-2011 19:38, Eric Hodel escreveu:
On Dec 19, 2011, at 3:04 PM, Rodrigo Rosenfeld Rosas wrote:
Em 19-12-2011 23:35, Eric Hodel escreveu:
[#41691] Ruby IRC Presence Problem — Eero Saynatkari <ruby-ml@...>
Hi,
[#41717] Feature : optional argument in File.join — Michel Demazure <michel@...>
In Windows, when using File.join, one often ends with a path containing
On Mon, Dec 19, 2011 at 6:09 AM, Michel Demazure <michel@demazure.com> wrot=
Luis Lavena wrote in post #1037331:
Hi,
On Tue, Dec 20, 2011 at 02:12, Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:
Hi,
On Tue, Dec 20, 2011 at 08:17, Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:
Nikolai Weibull wrote in post #1037488:
[#41721] Ruby and oniguruma relation. — V咜 Ondruch <v.ondruch@...>
Hi everybody,
[#41725] [ruby-trunk - Feature #5778][Open] Allow WEBrick::HTTPResponse to send IO-duck-typed bodies — Alex Young <alex@...>
[#41728] [ruby-trunk - Feature #5781][Open] Query attributes (attribute methods ending in `?` mark) — Thomas Sawyer <transfire@...>
[#41774] [ruby-trunk - Feature #5788][Open] Thread#at_exit — Masaki Matsushita <glass.saga@...>
[#41780] [Backport93 - Backport #5793][Open] Please backport r33662, r33666 — Jon Forums <redmine@...>
[#41787] Breaking while loading — Nikolai Weibull <now@...>
Hi!
[#41797] [ruby-trunk - Feature #5805][Open] object_hexid — Thomas Sawyer <transfire@...>
[#41799] Best way to separate implementation specific code? — Luis Lavena <luislavena@...>
Hello,
2011/12/24 Luis Lavena <luislavena@gmail.com>:
Hello,
On Sun, Dec 25, 2011 at 10:51 PM, U.Nakamura <usa@garbagecollect.jp> wrote:
Hello,
Hello,
Hi,
On Tue, Dec 27, 2011 at 11:21 PM, Yukihiro Matsumoto <matz@ruby-lang.org> w=
Hi,
On Tue, Dec 27, 2011 at 11:44 PM, Yukihiro Matsumoto <matz@ruby-lang.org> w=
[#41812] [ruby-trunk - Feature #5809][Open] Benchmark#bm: remove the label_width parameter — Benoit Daloze <redmine@...>
[#41841] YAML has become very slow under 1.9 — j.wuttke <j.wuttke@...>
The simple script
[#41848] [ruby-trunk - Feature #5826][Open] When the RUBY API_VERSION will be increased? — Ayumu AIZAWA <ayumu.aizawa@...>
[ruby-core:41686] Re: Documentation of the language itself (syntax, meanings, etc)
Em 15-12-2011 19:23, Gary Wright escreveu:
> On Dec 15, 2011, at 11:58 AM, Rodrigo Rosenfeld Rosas wrote:
>
>> For instance, I wanted to know if this is possible:
>>
>> class MyViewRenderer< DefaultRender # DefaultRender defines the 'render' method
>> def list
>> render_and_return[view: 'not_allowed'] unless allowed?
>> render view: 'list' # shouldn't get called
>> end
>>
>> protected
>>
>> def render_and_return
>> proc {|*args| render *args; return }
>> end
>>
>> def allowed?
>> false
>> end
>> end
>>
>> Yeah, I know several folks will point me out that I should be using catch-throw for achieving something like this, but that is not the point.
> Catch-throw? I remember reading about that but I'll bet it is one of the least used parts of Ruby.
>
> The return keyword in a block or in a simple proc (but not in a lambda) always returns from the method in which it is lexically embedded. In your example this means that 'return' is associated with the method render_and_return. If you invoke the proc returned by render_and_return, you get an error because the associated method is not active when the return is executed.
>
> Note: This all assumes you are using Ruby 1.9.X where the proc method creates a simple proc and not a lambda. If you try your example in Ruby 1.8.X you won't get an error since you'll be calling a lambda and 'return' in a lambda simply ends execution of the block (and *not* the enclosing method).
Yeah, I already knew about all this. What I'm asking is why Ruby won't
allow me to return from another method, ie, passing procs between
different methods that will allow me to return from any method through
that proc...
I would like to know the reasoning behind this design decision... Is it
just difficult technically to implement such behavior, or is it
undesired? For the latter case, I would like to know why it is undesired...
>> What I'm saying is that I can't find any official reference about the meanings of "return", "next" or "break", for instance. Nor can I find the reason why such construction is not allowed.
> This is discussed in _The_Ruby_Programming_Language_ by David Flanagan and Matz, which I consider to be more in the style of a programming reference manual than the more commonly referenced Pickaxe book by Dave Thomas (_Programming_Ruby_). I believe you are correct that there is no commonly referenced online 'official' language definition. There is the following ISO draft:<http://www.ipa.go.jp/osc/english/ruby/Ruby_final_draft_enu_20100825.pdf> but I don't think its description of 'return' is very helpful and the entire spec is out of date relative to language as defined by MRI 1.9.3.
Exactly, that was my point.
>> So, what is the reason why the proc with a return can only be called inside the method that created it?
> Why it behaves this way gets more into the philosophy of language design. With your proposed semantics it isn't possible to look at the source code and understand that the proc will cause a return from list() while the current semantics of 'return' do let you look at the source and know what method will terminate execution because of the return.
Humm... I think I get the point... For this case, if Ruby supported type
verification, this situation could be avoided. For example, suppose a
lambda is an instance of a different class (yes, I know it currently is
a special Proc):
def my_method(b, callback#Lambda)
# callback here can't be a proc so you can be sure that it won't
return from your method
# I'm using argument#type as a possible syntax for indicating the
type checking made by the Ruby interpreter...
# I'm also supposing that proc{} would create a Proc, while
lambda{} would create a Lambda...
end
Yes, I agree that too much work would be necessary just for supporting
this... I'm not actually suggesting that this should be supported, I'm
only wondering how we could make this possible...
But I agree with you... I wouldn't like to debug a code that could have
returned in the middle of a block without seeing a "return" there...
> The code you seem to want to avoid seems simple enough though. Making an explicit return implicit doesn't seem like an improvement to me. What is wrong with:
>
> def list
> if allowed?
> render view: 'list'
> else
> render view: 'not_allowed'
> end
> end
>
> or
>
> def list
> view = allowed? ? 'list' : 'not_allowed'
> render view: view
> end
Ok, I admit that you couldn't have understood my reasoning by this small
snippet. If you ask anyone doing real web development, they will tell
you that it is a common idiom to do something like:
def action
(render text: "failure while creating post"; return ) unless
Post.create(params)
expire_cache_from_post_list
render view: 'list'
end
I'm being very generic here and not using any specific web framework but
all of them are very similar with regards to this common use. Some of
them won't allow more than a single render call, as it won't make sense
to them and will raise a DoubleRenderException in the next render.
So, you'll get an exception if you forget to return after rendering. But
usually, you'll always want to return after a render call because you're
finished dealing with the request in 99.99% of the cases.
If returning from another method was possible, the framework could make
the render method return automatically after being called, for example.
That way, you would be able to simply write:
def action
render text: "failure while creating post" unless Post.create(params)
expire_cache_from_post_list
render view: 'list'
end
And this is much more readable to me from the perspective of someone
used to web programming. It would be implicit to the developer that
either "return" or "render" would stop the method execution. In
frameworks that don't support rendering by convention (you must call
render explicitly) it wouldn't even make sense to see a return in such
action methods.
I hope this example illustrates better the idea behind the desire for
returning from other methods...
Cheers,
Rodrigo.