[Ruby] self ? Ruby ? this ? Java

Alexander Bokovoy a.bokovoy на sam-solutions.net
Чт Дек 4 14:14:06 MSK 2003


(Сразу -- ставьте корректный charset -- у Вас US-ASCII выставлен, а само
письмо написано в кодировке KOI8-R. Это общая проблема Yahoo-based
почтовых ящиков, но зачем же страдать от этого читателям рассылки?)

On Thu, Dec 04, 2003 at 02:44:39AM -0800, V V wrote:
> Обращаюсь к специалистам :) в Ruby (и Java тоже :)))
> Есть у меня такой примерчик на Java
> -------------------------------------------
> public class ISOMsg extends ISOComponent 
>     implements Cloneable, Loggeable, Externalizable
> {
>     private WeakReference sourceRef;
> 
>     /**
>      * Creates an ISOMsg
>      */
>     public ISOMsg () {
>         fields = new Hashtable ();
>         maxField = -1;
>         dirty = true;
>         maxFieldDirty=true;
>         direction = 0;
>         header = null;
>     }
>     /**
>      * Creates a nested ISOMsg
>      */
>     public ISOMsg (int fieldNumber) {
>         this();
>         setFieldNumber (fieldNumber);
>     }
> ------------------------------------------
> С учетом того что Overload в Ruby отсутствует, мой
> вариант на Ruby такой ...
[skip]
То есть, вопрос стоит так: как организовать overload при инициализации
объекта?

> Вообщем, при вызове self повторный вызов initialize не
> происходит. :( Я конечно могу пойти таким образом
> ...
> self.foo
> ...
> def foo
> ....
> end
> 
> но хочется обойтись без этого.
> 
> Что можете посоветовать ?
StrongTyping, берется в RAA (raa.ruby-lang.org).

Что-то вроде:

class ISOMsg < ISOComponent
	def initialize(*args)
		@fields = Hash.new
		@maxField = -1
		@dirty = true
		@maxFieldDirty = true
		@direction = 0
		@header = nil
		overload (args, Integer) { |fieldNumber|
			setFieldNumber(fieldNumber)
			return
		}
		overload_default args
	end
end

-- 
/ Alexander Bokovoy
Samba Team                      http://www.samba.org/
ALT Linux Team                  http://www.altlinux.org/
Midgard Project Ry              http://www.midgard-project.org/


Подробная информация о списке рассылки Ruby