[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

classless methods

dave rose

10/27/2006 4:10:00 PM

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?

--
Posted via http://www.ruby-....

13 Answers

Daniel Berger

10/27/2006 4:24:00 PM

0

Dave Rose wrote:
> what class does a classless independent method belong too?

<snip>

Kernel.

Regards,

Dan

Trans

10/27/2006 4:43:00 PM

0


Dave Rose wrote:
> 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?

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

T.

Eero Saynatkari

10/27/2006 5:12:00 PM

0

On 2006.10.28 01:10, Dave Rose wrote:
> 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?

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

Daniel Berger

10/27/2006 5:18:00 PM

0


Daniel Berger wrote:
> Dave Rose wrote:
> > what class does a classless independent method belong too?
>
> <snip>
>
> Kernel.

Whoops. Make that Object.

- Dan

matt

10/27/2006 5:31:00 PM

0

Dave Rose <bitdoger2@yahoo.com> wrote:

> 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?

<http://www.rubycentral.com/faq/rubyfaq-7.html...

m.


--
matt neuburg, phd = matt@tidbits.com, http://www.tidbits...
Tiger - http://www.takecontrolbooks.com/tiger-custom...
AppleScript - http://www.amazon.com/gp/product/...
Read TidBITS! It's free and smart. http://www.t...

Jason Merrill

10/27/2006 5:44:00 PM

0

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>


On 10/27/06, matt neuburg <matt@tidbits.com> wrote:
> Dave Rose <bitdoger2@yahoo.com> wrote:
>
> > 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?
>
> <http://www.rubycentral.com/faq/rubyfaq-7.html...
>
> m.
>
>
> --
> matt neuburg, phd = matt@tidbits.com, http://www.tidbits...
> Tiger - http://www.takecontrolbooks.com/tiger-custom...
> AppleScript - http://www.amazon.com/gp/product/...
> Read TidBITS! It's free and smart. http://www.t...
>
>

matt

10/27/2006 6:06:00 PM

0

Jason Merrill <jason.merrill@yale.edu> wrote:

> 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"

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


--
matt neuburg, phd = matt@tidbits.com, http://www.tidbits...
Tiger - http://www.takecontrolbooks.com/tiger-custom...
AppleScript - http://www.amazon.com/gp/product/...
Read TidBITS! It's free and smart. http://www.t...

Hugh Sasse

10/27/2006 6:45:00 PM

0

matt

10/27/2006 7:04:00 PM

0

Hugh Sasse <hgs@dmu.ac.uk> wrote:

> On Sat, 28 Oct 2006, matt neuburg wrote:
>
> > Jason Merrill <jason.merrill@yale.edu> wrote:
> >
> > > 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"
> >
> > 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. :-)

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.



--
matt neuburg, phd = matt@tidbits.com, http://www.tidbits...
Tiger - http://www.takecontrolbooks.com/tiger-custom...
AppleScript - http://www.amazon.com/gp/product/...
Read TidBITS! It's free and smart. http://www.t...

Srdjan Marinovic

10/27/2006 10:27:00 PM

0

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