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?
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.
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.
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.
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 Objectsrdjan–
- 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”) => trueKernel.private_methods.include?(“hello”) => true
Kernel.private_methods.include?(“hello2”) => falseThe 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:
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
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs