ruby-changes:34902
From: zzak <ko1@a...>
Date: Mon, 28 Jul 2014 06:36:01 +0900 (JST)
Subject: [ruby-changes:34902] zzak:r46985 (trunk): * vm_eval.c: [DOC] [Bug #9551] Improve clarity of Kernel::catch
zzak 2014-07-28 06:35:47 +0900 (Mon, 28 Jul 2014) New Revision: 46985 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=46985 Log: * vm_eval.c: [DOC] [Bug #9551] Improve clarity of Kernel::catch documentation, patch by Jesse Sielaff. Modified files: trunk/ChangeLog trunk/vm_eval.c Index: ChangeLog =================================================================== --- ChangeLog (revision 46984) +++ ChangeLog (revision 46985) @@ -1,3 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Mon Jul 28 06:34:43 2014 Zachary Scott <e@z...> + + * vm_eval.c: [DOC] [Bug #9551] Improve clarity of Kernel::catch + documentation, patch by Jesse Sielaff. + Mon Jul 28 06:24:54 2014 Zachary Scott <e@z...> * lib/uri/common.rb: [DOC] [Bug #9563] Recommend using URI.escape Index: vm_eval.c =================================================================== --- vm_eval.c (revision 46984) +++ vm_eval.c (revision 46985) @@ -1780,39 +1780,56 @@ catch_i(VALUE tag, VALUE data) https://github.com/ruby/ruby/blob/trunk/vm_eval.c#L1780 /* * call-seq: - * catch([arg]) {|tag| block } -> obj + * catch([tag]) {|tag| block } -> obj * - * +catch+ executes its block. If a +throw+ is - * executed, Ruby searches up its stack for a +catch+ block - * with a tag corresponding to the +throw+'s - * _tag_. If found, that block is terminated, and - * +catch+ returns the value given to +throw+. If - * +throw+ is not called, the block terminates normally, and - * the value of +catch+ is the value of the last expression - * evaluated. +catch+ expressions may be nested, and the - * +throw+ call need not be in lexical scope. - * - * def routine(n) - * puts n - * throw :done if n <= 0 - * routine(n-1) - * end + * +catch+ executes its block. If +throw+ is not called, + * the block executes normally, and +catch+ returns the + * value of the last expression evaluated. + * + * catch(1) { 123 } # => 123 + * + * If +throw(tag2, val)+ is called, Ruby searches up its + * stack for a +catch+ block whose _tag_ has the same + * +object_id+ as _tag2_. If found, the block stops + * executing and returns _val_ (or +nil+ if no second + * argument was given to +throw+). + * + * catch(1) { throw(1, 456) } # => 456 + * catch(1) { throw(1) } # => nil + * + * When _tag_ is passed as the first argument, +catch+ + * yields it as the parameter of the block. * + * catch(1) {|x| x + 2 } # => 3 * - * catch(:done) { routine(3) } + * When no _tag_ is given, +catch+ yields a new unique + * object (as from +Object.new+) as the block parameter. + * This object can then be used as the argument to + * +throw+, and will match the correct +catch+ block. * - * <em>produces:</em> + * catch do |obj_A| + * catch do |obj_B| + * throw(obj_B, 123) + * puts "This puts is not reached" + * end * - * 3 - * 2 - * 1 - * 0 - * - * when _arg_ is given, +catch+ yields it as is, or when no - * _arg_ is given, +catch+ assigns a new unique object to - * +throw+. this is useful for nested +catch+. _arg_ can - * be an arbitrary object, not only Symbol. + * puts "This puts is displayed" + * 456 + * end + * + * # => 456 + * + * catch do |obj_A| + * catch do |obj_B| + * throw(obj_A, 123) + * puts "This puts is still not reached" + * end + * + * puts "Now this puts is also not reached" + * 456 + * end * + * # => 123 */ static VALUE -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/