[#60404] is RB_GC_GUARD needed in rb_io_syswrite? — Eric Wong <normalperson@...>
I haven't gotten it to crash as-is, but it seems like we need to
4 messages
2014/02/01
[#60682] volatile usages — Eric Wong <normalperson@...>
Hi all, I went ahead and removed some use of volatile which were once
5 messages
2014/02/13
[#60794] [RFC] rearrange+pack vtm and time_object structs — Eric Wong <normalperson@...>
Extracted from addendum on top of Feature #9362 (cache-aligned objects).
4 messages
2014/02/16
[#61139] [ruby-trunk - Feature #9577] [Open] [PATCH] benchmark/driver.rb: align columns in text output — normalperson@...
Issue #9577 has been reported by Eric Wong.
3 messages
2014/02/28
[ruby-core:60964] [ruby-trunk - Bug #9551] [Open] [DOC] Fix for documentation of Kernel::catch
From:
jesse.sielaff@...
Date:
2014-02-22 03:41:03 UTC
List:
ruby-core #60964
Issue #9551 has been reported by Jesse Sielaff.
----------------------------------------
Bug #9551: [DOC] Fix for documentation of Kernel::catch
https://bugs.ruby-lang.org/issues/9551
* Author: Jesse Sielaff
* Status: Open
* Priority: Normal
* Assignee:
* Category:
* Target version:
* ruby -v: 2.1.0
* Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
The current documentation for `Kernel::catch` contains complicated examples and confusing language.
*"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."*
This patch improves the explanation of how `catch` and `throw` work together and gives clear, very simple code examples.
The unified diff patch is attached. Full text of the new documentation block is below.
/*
* call-seq:
* catch([tag]) {|tag| block } -> obj
*
* +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
*
* 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.
*
* catch do |obj_A|
* catch do |obj_B|
* throw(obj_B, 123)
* puts "This puts is not reached"
* end
*
* 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
*/
---Files--------------------------------
ruby-changes.patch (2.61 KB)
--
http://bugs.ruby-lang.org/