This is a Ruby tree! It shows every object from the Ruby Programming Language in a tree format.

[]

        # Thread.[]

(from ruby core)
---
    thr[sym]   -> obj or nil

---

Attribute Reference---Returns the value of a fiber-local variable
(current thread's root fiber if not explicitly inside a Fiber), using
either a symbol or a string name. If the specified variable does not
exist, returns `nil`.

    [
      Thread.new { Thread.current["name"] = "A" },
      Thread.new { Thread.current[:name]  = "B" },
      Thread.new { Thread.current["name"] = "C" }
    ].each do |th|
      th.join
      puts "#{th.inspect}: #{th[:name]}"
    end

This will produce:

    #<Thread:0x00000002a54220 dead>: A
    #<Thread:0x00000002a541a8 dead>: B
    #<Thread:0x00000002a54130 dead>: C

Thread#[] and Thread#[]= are not thread-local but fiber-local. This
confusion did not exist in Ruby 1.8 because fibers are only available
since Ruby 1.9. Ruby 1.9 chooses that the methods behaves fiber-local to
save following idiom for dynamic scope.

    def meth(newvalue)
      begin
        oldvalue = Thread.current[:name]
        Thread.current[:name] = newvalue
        yield
      ensure
        Thread.current[:name] = oldvalue
      end
    end

The idiom may not work as dynamic scope if the methods are thread-local
and a given block switches fiber.

    f = Fiber.new {
      meth(1) {
        Fiber.yield
      }
    }
    meth(2) {
      f.resume
    }
    f.resume
    p Thread.current[:name]
    #=> nil if fiber-local
    #=> 2 if thread-local (The value 2 is leaked to outside of meth method.)

For thread-local variables, please see #thread_variable_get and
#thread_variable_set.



      

This is MURDOC! A Ruby documentation browser inspired by Smalltalk-80. It allows you to learn about Ruby by browsing through its class hierarchies, and see any of its methods.