How can we call a method without using . operator


#1

Hi all,
This might sound a bit wierd but I would like to know if
there are any other ways of calling a method without using . operator or
calling send().

Is it possible using blocks or something else?


#2

ruby rails wrote:

        This might sound a bit wierd but I would like to know if

there are any other ways of calling a method without using . operator or
calling send().

(or send presumably). How about this one?

def foo
puts “hello”
end

m = method(:foo)
m[]

What are you trying to achieve anyway?


#3

2009/1/19 ruby rails removed_email_address@domain.invalid

Hi all,
This might sound a bit wierd but I would like to know if
there are any other ways of calling a method without using . operator or
calling send().

You could write a DSL that would make it look like you weren’t doing dot
or
send() but at some level you’re going have to use one of those, or maybe
instance_eval. e.g.:

objects = {
:foo => foo_object
}

def method_missing(name, method)
objects[name.to_sym].send(method)
end

calls foo_object.bar_method

foo_object :bar_method

It might be helpful if we knew the problem you’re trying to solve – can
you
give us any more info?


#4

foo_object :bar_method

Correction: final line should have been
foo :bar_method


#5

On 19.01.2009 16:45, ruby rails wrote:

James C. wrote:

2009/1/19 ruby rails removed_email_address@domain.invalid

It might be helpful if we knew the problem you’re trying to solve – can
you
give us any more info?
I was asked this question by one of y interviewer…May be he is testing
my meta-programming skills…

No meta programming needed

irb(main):001:0> “foo”.instance_eval { puts length }
3
=> nil

Cheers

robert


#6

James C. wrote:

2009/1/19 ruby rails removed_email_address@domain.invalid

It might be helpful if we knew the problem you’re trying to solve – can
you
give us any more info?
I was asked this question by one of y interviewer…May be he is testing
my meta-programming skills…


#7

ruby rails wrote:

Hi all,
This might sound a bit wierd but I would like to know if
there are any other ways of calling a method without using . operator or
calling send().

Is it possible using blocks or something else?

Look Ma, no dots!

class Foo
def hello
puts “hello!”
end
end

eval “Foo\056new\056hello”
#=> hello!

I will send my contact info via email so that I may receive my prize.


#8

Robert K. wrote:

No meta programming needed

irb(main):001:0> “foo”.instance_eval { puts length }

Foul … you used a dot!


#9

On 19.01.2009 21:46, Brian C. wrote:

Robert K. wrote:

No meta programming needed

irb(main):001:0> “foo”.instance_eval { puts length }

Foul … you used a dot!

Uh, oh! I thought nobody would notice. Cough cough.

:wink:

robert


#10

One more way uses colons:

a = [1,2]
a::length # => 2
a::push(3) # => [1,2,3]
a::length # => 3