Bug #1664
closedKernel#define_singleton_method not documented [patch]
Description
=begin
Kernel#define_singleton_method is currently missing its documentation.
I propose the following:
call-seq:
define_singleton_method(symbol, method) => new_method
define_singleton_method(symbol) { block } => proc
Defines a singleton method in the receiver. The method
parameter can be a +Proc+ or +Method+ object.
If a block is specified, it is used as the method body. This block
is evaluated using instance_eval.
class A
  class << self
    def class_name
      to_s
    end
  end
end
A.define_singleton_method(:who_am_i) do
  "I am: #{class_name}"
end
A.who_am_i   # ==> "I am: A"
guy = "Bob"
guy.define_singleton_method(:hello) { "#{self}: Hello there!" }
guy.hello    # =>  "Bob: Hello there!"
I've included the corresponding patch. This method should also be documented in the 1.8.7 branch.
=end
Files
        
           Updated by yugui (Yuki Sonoda) over 16 years ago
          Updated by yugui (Yuki Sonoda) over 16 years ago
          
          
        
        
      
      - Status changed from Open to Closed
- % Done changed from 0 to 100
=begin
Applied in changeset r24089.
=end
        
           Updated by yugui (Yuki Sonoda) over 16 years ago
          Updated by yugui (Yuki Sonoda) over 16 years ago
          
          
        
        
      
      =begin
Thank you. The patch was applied except the last sentence.
On 6/20/09 7:58 PM, Marc-Andre Lafortune wrote:
If a block is specified, it is used as the method body. This block
is evaluated usinginstance_eval.
define_singleton_method just define a method into the singleton class.
It does not use instance_eval. So it works differently from instance_eval.
module M
obj = Object.new
obj.instance_eval do
T = Class.new
p T.name #=> nil
end
obj.define_singleton_method(:a) do
T = Class.new
p T.name #=> M::T
end
obj.a
end
-- Yugui yugui@yugui.jp
=end