Module methods


#1

I am trying to do this:

==== File: good.rb ====

module Good
def init_module
@var = “good”
end

def life_is_good
puts “life is #{@var}”
end

[… more methods …]
end

include X
init_module

======== and in a different file ========

include Good

life_is_good


That works but messes up when I try to use ruby-debug with it. So I
changed it to try to call init_module in a different way: instead of
include X, init_module, I tried both of these, neither of which works:

X::init_module

X.init_module

Each of those calls lead to an 'undefined method ‘init_module’ for
X:Module.

I am getting myself confused with Module methods etc etc.

Any help would be gratefully accepted!!

Pito


#2

It looks like what you really want is a class. Is there a specific
reason you don’t want to do this?

class Good
def initialize
@var = “good”
end

def life
puts @var
end
end

g = Good.new
g.life


#3

Mark T. wrote:

It looks like what you really want is a class. Is there a specific
reason you don’t want to do this?

class Good
def initialize
@var = “good”
end

def life
puts @var
end
end

g = Good.new
g.life

Yeah, I am trying to make as transparent as possible “Domain Specific
Language” so that the second file looks like a program in the DSL with
as little extra stuff as possible. So the second file ends up looking
like:

include Good

life
bicycle :first
telephone :last
life

(FOR EXAMPLE :slight_smile:


#4

Pretty sure that you need to prefix the module methods with the module
name. Yeah, I know.

Try:
module Good
def Good.init_module
@var = “good”
end

And the in your “different file”

require ‘good’;
Good.init_module

Which isn’t exactly what you want.

I think that you have to prefix the method with the module name since using it this way gets things added to main rather than to your own class/instance. It smells like include should make it so that you can omit the Good. on the call, but it doesn't work for me. Again, I think it may be something to do with it being in main rather than in your own class. You're basically trying to make a mixin for main and I suspect/know that the rules are somewhat different.

Hope that this helps some…


#5

On Wed, Jun 3, 2009 at 3:00 PM, Mark T. removed_email_address@domain.invalid wrote:

I think part 4 of this article is worth reading:
http://deadprogrammersociety.blogspot.com/2006/11/ruby-domain-specific-languages-basics_27.html

Also, the sample chapter of my book has a relevant section about this,
under “Building Flexible Interfaces”:

http://oreilly.com/catalog/9780596156749/index.html


#6

On Jun 3, 9:54 am, Pito S. removed_email_address@domain.invalid wrote:

life
I think part 4 of this article is worth reading:
http://deadprogrammersociety.blogspot.com/2006/11/ruby-domain-specific-languages-basics_27.html


#7

On Mon, Jun 8, 2009 at 6:34 PM, Pito S.removed_email_address@domain.invalid wrote:

Greg, I read the chapter. Excellent stuff. When’s the book coming out?
Or is it?

It’s already off to the printers so if you pre-order it now you should
have it within the next couple weeks.

-greg


#8

Gregory B. wrote:

On Wed, Jun 3, 2009 at 3:00 PM, Mark T. removed_email_address@domain.invalid wrote:

I think part 4 of this article is worth reading:
http://deadprogrammersociety.blogspot.com/2006/11/ruby-domain-specific-languages-basics_27.html

Also, the sample chapter of my book has a relevant section about this,
under “Building Flexible Interfaces”:

http://oreilly.com/catalog/9780596156749/index.html

Greg, I read the chapter. Excellent stuff. When’s the book coming out?
Or is it?

  • Pito

#9

Gregory B. wrote:

On Mon, Jun 8, 2009 at 6:34 PM, Pito S.removed_email_address@domain.invalid wrote:

Greg, I read the chapter. Excellent stuff. When’s the book coming out?
Or is it?

It’s already off to the printers so if you pre-order it now you should
have it within the next couple weeks.

-greg

http://www.salas.com/2009/06/09/geeky-check-out-ruby-best-practices-book-not-yet-out/

:slight_smile: