[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

class methods

Clement Ow

7/9/2008 9:23:00 AM

I have built my own ruby library where it contains my specific commands
and methods that I need to perform certain actions and my main script.

In my ruby library I have something like:
class Test
def toDDMMYYYY(sep)
strftime("%d#{sep}%m#{sep}%Y")
end
end

And in my main script I have something like:

require 'PersonalRubyLib.rb'

class MainLogic
def show_date
d = Date.today
d.Test.toDDMMYYYY("-")
end
end

But apparently it shows an error:
undefined method `toDDMMYYYY' for #<Date: 4909313
,2299161> (NoMethodError)

Did do wrongly in calling the class methods, maybe I am confused with
the syntax of calling class methods? Much help is appreciated, thanks!
--
Posted via http://www.ruby-....

7 Answers

Robert Dober

7/9/2008 11:04:00 AM

0

On Wed, Jul 9, 2008 at 11:22 AM, Clement Ow
<clement.ow@asia.bnpparibas.com> wrote:
> I have built my own ruby library where it contains my specific commands
> and methods that I need to perform certain actions and my main script.
>
> In my ruby library I have something like:
> class Test
> def toDDMMYYYY(sep)
> strftime("%d#{sep}%m#{sep}%Y")
> end
> end
>
> And in my main script I have something like:
>
> require 'PersonalRubyLib.rb'
>
> class MainLogic
> def show_date
> d = Date.today
> d.Test.toDDMMYYYY("-")
> end
> end
>
> But apparently it shows an error:
> undefined method `toDDMMYYYY' for #<Date: 4909313
> ,2299161> (NoMethodError)
>
> Did do wrongly in calling the class methods, maybe I am confused with
> the syntax of calling class methods? Much help is appreciated, thanks!
> --
> Posted via http://www.ruby-....
>
>

You did not define a class method, actually there are more ways to
implement what you want.
I will show you three here, it is up to you to decide what fits your needs best

class << C = Class::new { ... }
def m; 42 end
end

C.m

class C
def self.m; 42 end
end

C.m

module M
def m; 42 end
module_function :m
end


M.m

HTH
Robert

--
http://ruby-smalltalk.blo...

---
AALST (n.) One who changes his name to be further to the front
D.Adams; The Meaning of LIFF

Dave Bass

7/9/2008 11:48:00 AM

0

Robert Dober wrote:
> You did not define a class method

To expand, what Robert means is that you defined an instance method. To
make it a class method in class C, you should C.m or self.m, not m
(which would be an instance method).

Personally I prefer self.m, as I can subsequently change the name of the
class if necessary without having to change all the class method names
too. Laziness can be a virtue. ;-)

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

Nando Sanchez

7/9/2008 3:24:00 PM

0

Clement:

I think you have 2 different errors in your script:

1. The error already highlighted by other forum members.
2. You are creating a class named "Test" and a method for it, and later
on you try to call this method inside an object that belongs to a
totally different class (Date class). If you want to add the new method
to the Date class you only need to write:

class Date
def toDDMMYYYY(sep)
strftime("%d#{sep}%m#{sep}%Y")
end
end

In this way the new method will be available in any date object. You
need to modify your main code too:

class MainLogic
def show_date
d = Date.today
d.toDDMMYYYY("-")
end
end

Rgd,

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

Clement Ow

7/10/2008 2:35:00 AM

0

Nando Sanchez wrote:
> Clement:
>
> I think you have 2 different errors in your script:
>
> 1. The error already highlighted by other forum members.
> 2. You are creating a class named "Test" and a method for it, and later
> on you try to call this method inside an object that belongs to a
> totally different class (Date class). If you want to add the new method
> to the Date class you only need to write:
>
> class Date
> def toDDMMYYYY(sep)
> strftime("%d#{sep}%m#{sep}%Y")
> end
> end
>
> In this way the new method will be available in any date object. You
> need to modify your main code too:
>
> class MainLogic
> def show_date
> d = Date.today
> d.toDDMMYYYY("-")
> end
> end
>
> Rgd,
>
> Nando

Thanks for the replies, it makes Ruby learning so much easier! =)

It does work however if i change the class name to Date instead of test
too. But what if my class is an inherited class? Maybe an example might
explain clearer.

Assuming I have 2 classes:

class MadDate < Date
def toDDMMYYYY(sep = "/")
strftime(%d%m%Y")
end
end

class Main
def self.show
d = Date.today
d.toDDMMYYYY("-")
end
end

And when i call, Main.show, it gives the same error "undefined method
toDDMMYYYY". Is there then a way of working around inherited classes?
--
Posted via http://www.ruby-....

ruud grosmann

7/10/2008 10:24:00 AM

0

> class MadDate < Date
> def toDDMMYYYY(sep = "/")
> strftime(%d%m%Y")
> end
> end
>
> class Main
> def self.show
> d = Date.today
> d.toDDMMYYYY("-")
> end
> end
>


hi Nando,
since your extended class is a MadDate, you should create a
MadDate-object, not a Date-object.

Ruud

Eddie Haskell

7/9/2012 5:45:00 PM

0


"D?nk 42?" <dank@kgb.org> wrote in message
news:3JGdnQ_ojZ8Vl2bSnZ2dnUVZ_qmdnZ2d@earthlink.com...
> On Mon, 09 Jul 2012 11:29:10 -0500, Eddie Haskell wrote:
>
>> "A child's birthday party at a Pittsburgh-area Chuck E. Cheese turned
>> bloody over the weekend when a jealous woman attacked her love rival
>> with a pair of scissors and a brick, police said."
>
> We need tougher scissors and brick control laws!
>
>
>> "Monroeville police said Lynaa Eva Dobbins, 20, went ballistic when she
>> discovered that her ex, Garrett Lee Cogdell, 21, invited his new
>> girlfriend to his child's birthday party on Saturday night."
>
> Sounds like an episode of Jerry Springer.

They simply cracked under the stress of finally realizing that Hussein
wasn't going pay their rent or put gas in their car.

It's Obama money!

It's Obama money!

-Eddie Haskell


Eddie Haskell

7/9/2012 5:48:00 PM

0


"Dennis M" <dennism3@dennism3.invalid> wrote in message
news:dennism3-6C6B97.12191309072012@bonxibon.datemas.de...
> In article <3JGdnQ_ojZ8Vl2bSnZ2dnUVZ_qmdnZ2d@earthlink.com>,
> D??nk 42?? <dank@kgb.org> wrote:
>
>> Sounds like an episode of Jerry Springer.
>
> Or the latest in the Child's Play horror film series.

They snapped like dry twigs upon hearing the news that Brad Pitt's mom is
endorsing Romney.

-Eddie Haskell