Hi all,
I’m new dev in Ruby, and my first question here:
how to know if funtion exists ?
On Dec 6, 2007 4:37 PM, Girard F. [email protected] wrote:
Hi all,
I’m new dev in Ruby, and my first question here:
how to know if funtion exists ?Posted via http://www.ruby-forum.com/.
that is quite simple, but is this really what you want to know?
(a) method exists for a given object
a.methods.include? “my_method”
(b) get method if it exists
a.method(“my_method”) rescue nil
(c) & (d) the same game can be played with instance_methods
HTH
Robert
–
http://ruby-smalltalk.blogspot.com/
All truth passes through three stages. First, it is ridiculed. Second,
it is violently opposed. Third, it is accepted as being self-evident.
Schopenhauer (attr.)
Robert D. wrote:
On Dec 6, 2007 4:37 PM, Girard F. [email protected] wrote:
Hi all,
I’m new dev in Ruby, and my first question here:
how to know if funtion exists ?Posted via http://www.ruby-forum.com/.
that is quite simple, but is this really what you want to know?
(a) method exists for a given object
a.methods.include? “my_method”
(b) get method if it exists
a.method(“my_method”) rescue nil
(c) & (d) the same game can be played with instance_methodsHTH
Robert–
http://ruby-smalltalk.blogspot.com/
All truth passes through three stages. First, it is ridiculed. Second,
it is violently opposed. Third, it is accepted as being self-evident.
Schopenhauer (attr.)
Thanks for your answer Robert.
It’s not a method but a simple function like
def foo()
#some code
end
is there something like :
functions.exist?(‘foo’)
On Dec 6, 10:11 am, Lee J. [email protected] wrote:
Lee
Posted viahttp://www.ruby-forum.com/.
a.methods.include? is normally spelled a.respond_to?
Regards,
Jordan
It’s not a method but a simple function like
def foo()
#some code
end
This is a method…
Robert D.'s options are the best way to find what you’re looking for
Regards,
Lee
Thanks for your answer Robert.
It’s not a method but a simple function like
def foo()
#some code
endis there something like :
functions.exist?(‘foo’)
A method and a function are the same thing. Also, check this out.
def foo
puts “Foo is being called.”
end
methods.include? “foo”
=> true
method(“foo”).call
“Foo is being called.”
Peter B. wrote:
Thanks for your answer Robert.
It’s not a method but a simple function like
def foo()
#some code
endis there something like :
functions.exist?(‘foo’)A method and a function are the same thing. Also, check this out.
def foo
puts “Foo is being called.”
endmethods.include? “foo”
=> truemethod(“foo”).call
“Foo is being called.”
Thanks a lot Peter, it’s the answer i m looking for;)
Just one thing:
a method, for me, is ‘function or procedure’ from an object
a function (standalone one) is some instructions that returns a result
a procedure (standalone one) execute instructions without necessary
returns result
It wrong or old scool ?
Anyway thanks
Alex Y. wrote:
Girard F. wrote:
Thanks a lot Peter, it’s the answer i m looking for;)
Just one thing:
a method, for me, is ‘function or procedure’ from an object
a function (standalone one) is some instructions that returns a result
a procedure (standalone one) execute instructions without necessary
returns resultIt wrong or old scool ?
In Ruby, it is not possible for a function to exist without being
attached to an object; all functions are methods. Also, every method
returns a value; all procedures are functions.
this explains that:)
Thank you all
Girard F. wrote:
Thanks a lot Peter, it’s the answer i m looking for;)
Just one thing:
a method, for me, is ‘function or procedure’ from an object
a function (standalone one) is some instructions that returns a result
a procedure (standalone one) execute instructions without necessary
returns resultIt wrong or old scool ?
In Ruby, it is not possible for a function to exist without being
attached to an object; all functions are methods. Also, every method
returns a value; all procedures are functions.
On Dec 7, 2007 8:35 AM, Peter B. [email protected] wrote:
def foo
puts “Foo is being called.”
endmethods.include? “foo”
=> true
you surely mean false here, right?
the methods method of the toplevel does not seem to include the user
defined methods, or is this just a bug?
R.
–
http://ruby-smalltalk.blogspot.com/
All truth passes through three stages. First, it is ridiculed. Second,
it is violently opposed. Third, it is accepted as being self-evident.
Schopenhauer (attr.)
Girard F. wrote:
a method, for me, is ‘function or procedure’ from an object
a function (standalone one) is some instructions that returns a result
a procedure (standalone one) execute instructions without necessary
returns result
def foo
p self.class
end
foo
…will result in “Object”
Best regards,
Jari W.
On Dec 7, 4:27 am, Robert D. [email protected] wrote:
the methods method of the toplevel does not seem to include the user
defined methods, or is this just a bug?
R.http://ruby-smalltalk.blogspot.com/
All truth passes through three stages. First, it is ridiculed. Second,
it is violently opposed. Third, it is accepted as being self-evident.
Schopenhauer (attr.)
Works here (even though respond_to? is misspelled
def foo; end
=> nil
methods.include? “foo”
=> true
Regards,
Jordan
Robert D. wrote:
def foo
puts “Foo is being called.”
endmethods.include? “foo”
=> true
you surely mean false here, right?
the methods method of the toplevel does not seem to include the user
defined methods, or is this just a bug?
They’re included in IRB:
irb(main):001:0> def foo
irb(main):002:1> puts “Foo is being called”
irb(main):003:1> end
=> nil
irb(main):004:0> methods.include? “foo”
=> true
but not in a script:
alex@shaxam:~$ cat toplevel.rb
def foo
puts “Foo is being called”
end
p methods.include?(“foo”)
alex@shaxam:~$ ruby toplevel.rb
false
On Dec 7, 2007 12:33 PM, Alex Y. [email protected] wrote:
A method and a function are the same thing. Also, check this out.
Alex
IRB is not a good tool to test these behaviors as the toplevel object
is not the same.
Test it in a program.
R.
–
http://ruby-smalltalk.blogspot.com/
All truth passes through three stages. First, it is ridiculed. Second,
it is violently opposed. Third, it is accepted as being self-evident.
Schopenhauer (attr.)
Jordan Callicoat wrote:
On Dec 7, 5:33 am, Alex Y. [email protected] wrote:
A method and a function are the same thing. Also, check this out.
Alex
Toplevel methods are implicitly added as private methods of class
Object, so…p self.private_methods.include?(“foo”) # => true
Regards,
Jordan
It’s true, i try this differents ways :
in irb:
def foo
puts ‘test’
end
=> nil
methods.include? "foo
=> true
in test file:
def foo()
puts ‘test’
end
puts methods.include?(‘foo’)
=> false
So, now with your private_methods
def foo()
puts ‘test’
end
puts private_methods.include?(‘foo’)
=> true
Good job
On Dec 7, 7:31 am, Girard F. [email protected] wrote:
Regards,
Posted viahttp://www.ruby-forum.com/.
But you don’t really want that…
You want respond_to? which Just Works everywhere. And really, you
probably don’t even want to be asking if a method is defined (depends
on your code), but usually there are better ways of doing things (like
unit testing).
HTH,
Jordan
On Dec 7, 5:33 am, Alex Y. [email protected] wrote:
A method and a function are the same thing. Also, check this out.
Alex
Toplevel methods are implicitly added as private methods of class
Object, so…
p self.private_methods.include?(“foo”) # => true
Regards,
Jordan
Jordan Callicoat wrote:
On Dec 7, 7:31 am, Girard F. [email protected] wrote:
Regards,
Posted viahttp://www.ruby-forum.com/.
But you don’t really want that…You want respond_to? which Just Works everywhere. And really, you
probably don’t even want to be asking if a method is defined (depends
on your code), but usually there are better ways of doing things (like
unit testing).HTH,
Jordan
No it’s ok, i am happy with that, if i really want, i can merge these 2
methods:
def foo()
puts ‘test’
end
def function?(function_name)
return true if private_methods.include?(function_name)
return true if methods.include?(function_name)
return false
end
puts function?(‘foo’) => true
puts function?(‘notfoo’) => false
puts function?(‘puts’) => true
It’s nice to learn a new language like that, thank you so much (and
sorry for my poor english)
On Dec 7, 8:16 am, Girard F. [email protected] wrote:
on your code), but usually there are better ways of doing things (like
endIt’s nice to learn a new language like that, thank you so much (and
sorry for my poor english)
–
Posted viahttp://www.ruby-forum.com/.
Your english is fine.
And I’m glad you like ruby!
But really, you want to use respond_to? …that’s why it was added to
the language:
http://www.ruby-doc.org/core/classes/Object.html#M000333
In rbuy, everything is an object, and every callable object is a
method. What it means when you say…
foo()
…is really this…
send(:foo) # actual ruby, try it!
In other words, you don’t “call” a method in ruby, you send an object
a message that tells it to execute some code by that name. So, for
example, when you say…
[3,2,1].sort
…it really means…
[3,2,1].send(:sort) # try it!
So the way to check if an object can execute code with a certain name
(“foo”), is to ask does it “respond_to?(‘foo’)”…that means “can I
send the object with a message ‘foo’ and it knows how to execute it?”
If I don’t make sense, just ignore me.
Regards,
Jordan
On Dec 7, 8:40 am, Robert D. [email protected] wrote:
Toplevel methods are implicitly added as private methods of class
end
puts methods.include?(‘foo’)No, it behaves the same, you will get a respond_to?(foo) false at the
http://ruby-smalltalk.blogspot.com/
All truth passes through three stages. First, it is ridiculed. Second,
it is violently opposed. Third, it is accepted as being self-evident.
Schopenhauer (attr.)
You have to pass a second parameter to respond_to? to include private
methods.
Regards,
Jordan