Classless methods

what class does a classless independent method belong too?
another words if i just make an new irb session and type:

def widget(tidbit)
tidbit
end

a=1.0
puts widget(a)

b=‘string’

puts widget(b)

what class will the widget method belong too?

Dave R. wrote:

what class does a classless independent method belong too?

Kernel.

Regards,

Dan

On 10/27/06, Trans [email protected] wrote:

Dave R. wrote:

what class does a classless independent method belong too?

Not Kernel, it becomes a private method of Object class.

T.

Actually, it looks like it becomes a public instance method of Object:

irb(main):001:0> def hello; “hi”; end
=> nil
irb(main):002:0> self.class
=> Object
irb(main):004:0> self.public_methods.include?(“hello”)
=> true
irb(main):005:0> Object.private_methods.include?(“hello”)
=> false
irb(main):006:0> Object.private_instance_methods.include?(“hello”)
=> false
irb(main):007:0> Object.public_instance_methods.include?(“hello”)
=> true
irb(main):008:0> (class << self; self;
end).public_instance_methods.include?(“hello”)
=> true

/Nick

Dave R. wrote:

b=‘string’

puts widget(b)

what class will the widget method belong too?

Not Kernel, it becomes a private method of Object class.

T.

Daniel B. wrote:

Dave R. wrote:

what class does a classless independent method belong too?

Kernel.

Whoops. Make that Object.

  • Dan

On 2006.10.28 01:10, Dave R. wrote:

b=‘string’

puts widget(b)

what class will the widget method belong too?

Ruby can tell you.

def widget
# …
end

p method(‘widget’) # => #<Method: Object#widget>

p Object.methods.include? ‘widget’ # => true
p Object.ancestors # => [Object, Kernel]
p Kernel.methods.include? ‘widget’ # => true

Dave R. [email protected] wrote:

b=‘string’

puts widget(b)

what class will the widget method belong too?

http://www.rubycentral.com/faq/rubyfaq-7.html#ss7.4

m.

Jason M. [email protected] wrote:

irb(main):005:0> [1,3,5].say_hello
=> “Hello”

But that’s just a vagary of how irb works. You couldn’t do that in a
real script. m.

On Sat, 28 Oct 2006, matt neuburg wrote:

irb(main):004:0> say_hello
=> “Hello”
irb(main):005:0> [1,3,5].say_hello
=> “Hello”

But that’s just a vagary of how irb works. You couldn’t do that in a
real script. m.

Why not? say_hello is now a method of Object, an ancestor of [1,3,5].
Challenge: show us what the error is when it fails. :slight_smile:

    Hugh

And since Object is an ancestor of pretty much everything in ruby,
it’s interesting to note that these methods are now defined for
practically everything in ruby:

irb(main):001:0> def say_hello
irb(main):002:1> “Hello”
irb(main):003:1> end
=> nil
irb(main):004:0> say_hello
=> “Hello”
irb(main):005:0> [1,3,5].say_hello
=> “Hello”
irb(main):006:0> Array.say_hello
=> “Hello”
irb(main):007:0> Hash.say_hello
=> “Hello”
irb(main):008:0>

Hugh S. [email protected] wrote:

irb(main):003:1> end
Challenge: show us what the error is when it fails. :slight_smile:
matt-neuburgs-imac-g5:~ mattneub$ ruby

def howdy
puts “hi”
end
[1,2,3].howdy

-:4: private method `howdy’ called for [1, 2, 3]:Array (NoMethodError)

m.

Trans wrote:

Not Kernel, it becomes a private method of Object class.

def widget(tidbit)
tidbit
end

I was under the impression that the widget(tidbit) method becomes a
private method of Kernel not Object.

def hello
“hello”
end

class Object
def hello2
“hello2”
end
private_class_method :hello2
end

Object.private_methods.include?(“hello”) => true
Object.private_methods.include?(“hello2”) => true

Kernel.private_methods.include?(“hello”) => true
Kernel.private_methods.include?(“hello2”) => false

The code above demonstrates that hello is private to both Kernel and
Object as opposed to hello2 which is only private to Object.

Am I making a silly deduction mistake somewhere?

srdjan

On Oct 28, 12:48 am, “Simen E.” [email protected] wrote:

end

$ ruby test.rb
x added to Object

srdjan–

  • Simen

very good point, I guess in my post I made a mistake of not thinking
about “main” context.

srdjan

On Sat, 28 Oct 2006, matt neuburg wrote:

Hugh S. [email protected] wrote:

On Sat, 28 Oct 2006, matt neuburg wrote:

    [...]

end
[1,2,3].howdy

-:4: private method `howdy’ called for [1, 2, 3]:Array (NoMethodError)

Thank you. Saw the other post about that being a private method after
posting. I’d completely forgotten about that (as you can tell).

m.

    Thanks
    Hugh

On 10/28/06, srdjan.m [email protected] wrote:

def hello
Object.private_methods.include?(“hello”) => true
Object.private_methods.include?(“hello2”) => true

Kernel.private_methods.include?(“hello”) => true
Kernel.private_methods.include?(“hello2”) => false

The code above demonstrates that hello is private to both Kernel and
Object as opposed to hello2 which is only private to Object.

Am I making a silly deduction mistake somewhere?

I thought it was added to Kernel too, but it appears not to be the case:

test.rb

module Kernel
def self.method_added(m) puts “#{m} added to Kernel” end
end

class Object
def self.method_added(m) puts “#{m} added to Object” end
end

def x
end

$ ruby test.rb
x added to Object