In message “Re: Class & modifiers modifiers”
on Thu, 25 Jan 2007 23:58:09 +0900, Miquel [email protected]
writes:
|module A
|
| protected
|
| def b_method()
| return ‘foo->A’
| end
|
|end
|
|class B
| include A
|
| def b_method()
| return ‘foo->B’
| end
|
|end
|
|Is B’s method b_method() protected? Is it public? What the hell is this
|method ( ) ?
public. I don’t recommend to override protected method though.
| def b_method()
| end
|
|end
|
|Is B’s method b_method() protected? Is it public? What the hell is
this |method ( ) ?
public. I don’t recommend to override protected method though.
Why not?
You might have a protected method in a module which has no code or
only an exception (something like an abstract method in Java/C#) and has
a different behaviour in the different classes which include it. In this
case it must have been overriden.
What do you think about this?
Btw, congratulations for this awesome language you have written.
matz.
Miquel
LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto. http://es.voice.yahoo.com
Because protected methods are called only from subclass of defining
As far as current protected behavior remains, I’d recommend to prepare
separate method to override in the subclass.
Excuse me if I’m getting boring but I don’t know if I explained myself
well, here is an example:
module Shape
def name #raise a not implemented method.
end
def printName()
puts name
end
end
class Square
include Shape
def name
return ‘Square’
end
end
class Circle
include Shape
def name
return ‘Circle’
end
end
I know that it could be written, for example, as a attr_reader and set
it in the initialize, but this is the idea I want to express (I think
its so useful).
Or maybe you want to say that it’s better to code an intermidiate class
between de module and the classes (or even instead of the module) and
declare there the “abstract” method?
Sorry, but I’m so used to Java and C#.
Kind regards
Miquel
matz.
LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto. http://es.voice.yahoo.com
|> public. I don’t recommend to override protected method though.
In this |case it must have been overriden.
include Shape
Or maybe you want to say that it’s better to code an intermidiate class
between de module and the classes (or even instead of the module) and
declare there the “abstract” method?
Sorry, but I’m so used to Java and C#.
Kind regards
Miquel
May I suggest just not to define Shape#name, I believe that would be the
most ruby like way to do this.
Imagine that you forget to define it
Hexagon = Class.new Shape # guess where I live
In message “Re: Class & modifiers modifiers”
on Fri, 26 Jan 2007 01:13:25 +0900, Miquel [email protected]
writes:
|> public. I don’t recommend to override protected method though.
|
|Why not?
Because protected methods are called only from subclass of defining
class. That means overriding changes the restriction scope of the
method.
|You might have a protected method in a module which has no code or
|only an exception (something like an abstract method in Java/C#) and has
|a different behaviour in the different classes which include it. In this
|case it must have been overriden.
|
|What do you think about this?
As far as current protected behavior remains, I’d recommend to prepare
separate method to override in the subclass.
Java/C#) and has |a different behaviour in the different classes
module Shape
class Circle
think its so useful).
Miquel
May I suggest just not to define Shape#name, I believe that would be
the most ruby like way to do this.
Imagine that you forget to define it
Hexagon = Class.new Shape # guess where I live
I’m sorry, but Shape is a module (it can not be create an object using
it).
Hexagon.new.print_name ===> NoMethodError
AFAIU that is pretty much the behavior you want
Thanks a lot for your suggestions, I’ll try to rebuild my ideas using
Ruby.
HTH
Robert
Kind regards
LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto. http://es.voice.yahoo.com
Excuse me if I’m getting boring but I don’t know if I explained
end
Kind regards
I’m sorry, but Shape is a module (it can not be create an object using
it).
I’m sorry if I have been a little rude, it was not my intention
Hexagon.new.print_name ===> NoMethodError
AFAIU that is pretty much the behavior you want
Thanks a lot for your suggestions, I’ll try to rebuild my ideas using
Ruby.
Bye
May I suggest just not to define Shape#name, I believe that would be
the most ruby like way to do this.
Imagine that you forget to define it
Hexagon = Class.new Shape # guess where I live
I’m sorry, but Shape is a module (it can not be create an object using
it).