Nested classes

hi list.

I have the following code:

#! /usr/bin/ruby

class B
def fun_b
p “B”
end
end

class A
b = B.new
end

a = A.new
a.b.fun_b

The part that bugs me is this error:
./test.rb:15: undefined method `b’ for #<A:0xb7cafb24> (NoMethodError)

What is the way to code the above ideea, so that the last line would be
correct.

I’m running ruby 1.8.3 (2005-09-21) [i486-linux].


Regards, Groleo!

Use “Reply to All” on mailing lists.

touch universe

chmod +x universe

./universe

On 16/11/05, Groleo M. [email protected] wrote:

end

./test.rb:15: undefined method `b’ for #<A:0xb7cafb24> (NoMethodError)

What is the way to code the above ideea, so that the last line would be correct.

I’m running ruby 1.8.3 (2005-09-21) [i486-linux].

What problem do you want to solve?

Is this maybe nearer to you goals:

class A
class B
def fun_b
p “B”
end
end
end

A::B.new.fun_b

cheers,

Brian


http://ruby.brian-schroeder.de/

Stringed instrument chords: http://chordlist.brian-schroeder.de/

Groleo M. schrieb:

a = A.new
a.b.fun_b

The part that bugs me is this error:
./test.rb:15: undefined method `b’ for #<A:0xb7cafb24> (NoMethodError)

What is the way to code the above ideea, so that the last line would be correct.

Maybe this is what you want:

class A
attr_reader :b
def initialize
@b = B.new
end
end

Note that here each instance of A has its own instance of B, which might
not be what you want.

Regards,
Pit

On 16/11/05, Groleo M. [email protected] wrote:

end

Consider the case when class B would have more member functions.
end

Maybe you should look at the delegation pattern. That may be
applicable here. But I have not yet understood your use case. Could
you describe it in a bit more detail?

regards,

Brian


http://ruby.brian-schroeder.de/

Stringed instrument chords: http://chordlist.brian-schroeder.de/

On 11/16/05, Brian Schröder [email protected] wrote:

  p "B"
   p "_B"

I couldn’t find any hint on google though :frowning:

Maybe you should look at the delegation pattern. That may be
applicable here. But I have not yet understood your use case. Could
you describe it in a bit more detail?

Sure.
Consider a client script that has to querry a server.
The server operate on users/domains of a running qmail.

So, I would have a class named Client, with the folowing members:
login( user, pass ) logins to the remote administration server
domain an instantion of a domain class.

OTOH Domain class has X member functions:
add( domain_name) adds a new domain
remove
update

So a scenario would look like:

c =Client.new #creates a new Domain object
c.login( “foo”, “bar” )
c.domain.add( “localdomain” )

Now , back to the code ,the attr_reader was the magic word from what
Pit posted .
Maybe you too observed, but why in ruby
this attr_reader : b is different from attr_reader :b
^space ^no space


Regards, Groleo!

Use “Reply to All” on mailing lists.

touch universe

chmod +x universe

./universe

On Oct 8, 2013, at 9:40 AM, Xeno C. [email protected]
wrote:

Is it good idea to use nested classes if they are small and will be used by
parent class only?

Bob

You can check out any time you like, but you can never leave.

On 16/11/05, Groleo M. [email protected] wrote:

def fun_b
 def other_b

network protocol.

c =Client.new #creates a new Domain object
c.login( “foo”, “bar” )
c.domain.add( “localdomain” )

Now , back to the code ,the attr_reader was the magic word from what
Pit posted .
Maybe you too observed, but why in ruby
this attr_reader : b is different from attr_reader :b
^space ^no space

Because :b is the symbol :b while : b is a colon followed by a b which
is not allowed syntax here.

cheers,

Brian


http://ruby.brian-schroeder.de/

Stringed instrument chords: http://chordlist.brian-schroeder.de/

Groleo M. [email protected] writes:

[ … ]

Now , back to the code ,the attr_reader was the magic word from what
Pit posted .
Maybe you too observed, but why in ruby
this attr_reader : b is different from attr_reader :b
^space ^no space

Because colon-identifier represents a symbol, and attr_reader takes
symbols as arguments. The colon is not a separator. For example:]

attr_reader :a, :b, :c

Each of :a, :b, and :c are symbols.

On 11/16/05, Brian Schröder [email protected] wrote:

end
end

A::B.new.fun_b

cheers,

Brian

Consider the case when class B would have more member functions.
In your example I would have to create a new object for each call to a
B function.
OTOH, a solution that I dont like :slight_smile: could be :
class A
class B
def fun_b
p “B”
end
def other_b
p “_B”
end
end
end
b = A::B.new
b.fun_b
b.other_b

By the instantion of a new B object in the code from the first post,
and refering to it, I was searching to keep a hierarchy inside a
network protocol.
I couldn’t find any hint on google though :frowning:


Regards, Groleo!

Use “Reply to All” on mailing lists.

touch universe

chmod +x universe

./universe