A2 & Oberon » Программирование » ActiveOberon » Использование процедур из других модулей

Страниц (1): [1]
 

1. lit-uriy - 11 Января, 2009 - 13:08:04 - перейти к сообщению
Дано:

MODULE FirstModule

PROCEDURE FirstPoc;
BEGIN
...
END FirstPoc;

END FirstModule.
и

MODULE TargetModule;

IMPORT
FirstModule;

PROCEDURE TargetPoc;
BEGIN
FirstModule.FirstPoc;
END TargetPoc;

END TargetModule.
При вызове процедуры из другого модуля приходится перед её именем писать имя модуля. Если эту процедуру из одного и того же модуля нужно вызывать много раз, то становится утомительно писать имя модуля.

Можно ли избежать указания имени модуля, если считать, что такая процедура отсутствует в других импортируемых модулях?
2. BohdanT - 11 Января, 2009 - 13:31:51 - перейти к сообщению
в Модуле-2 было можно с помощью конструкции FROM.

А тут только с помощью процедурных переменных...

Или можно значительно сократить время набора:

IMPORT F:=FirstModule;

Тогда вызов:
F.FirstPoc;
3. lit-uriy - 11 Января, 2009 - 13:41:38 - перейти к сообщению
BohdanT пишет:
IMPORT F:=FirstModule;

Тогда вызов:
F.FirstPoc;
я пока так и выкручиваюсь
4. Wlad - 11 Января, 2009 - 14:38:47 - перейти к сообщению
lit-uriy пишет:
При вызове процедуры из другого модуля приходится перед её именем писать имя модуля. Если эту процедуру из одного и того же модуля нужно вызывать много раз, то становится утомительно писать имя модуля.

Вводите псевдонимы. Только теперь напишите в проекте напоминалку, что во что сокращено. Для однообразия и помощи памяти... Улыбка

lit-uriy пишет:
Можно ли избежать указания имени модуля, если считать, что такая процедура отсутствует в других импортируемых модулях?

Нет. Можете заменять имя модуля псевдонимом. Но от префикса отказываться нельзя. Это - составляющая часть средств повышения надёжности языка.
Возмущения по поводу недубств уже проходили. Это неудобно в программах "здравствуй мир" или вычисления корней квадратного уравнения. После нескольких тысяч строк и десятков модулей в проекте начинаешь молиться за дедушку Вирта...
5. MaDzi - 12 Января, 2009 - 00:01:11 - перейти к сообщению
Я встречал такой код:

TYPE
NewString = Utilities.NewString;
6. BohdanT - 12 Января, 2009 - 00:50:47 - перейти к сообщению
MaDzi пишет:
Я встречал такой код:

TYPE
NewString = Utilities.NewString;

ну, ну и интересно где Подмигивание
Может такой:

TYPE
String = Utilities.String;
7. MaDzi - 12 Января, 2009 - 01:24:48 - перейти к сообщению
BohdanT пишет:
MaDzi пишет:
Я встречал такой код:

TYPE
NewString = Utilities.NewString;

ну, ну и интересно где Подмигивание
Может такой:

TYPE
String = Utilities.String;

Ты прав. Каюсь. Но вот это работает:

MODULE Untitled;

IMPORT Utilities;

VAR
NewString: PROCEDURE (CONST str :ARRAY OF CHAR): Utilities.String;

PROCEDURE Demo*();
VAR
US: Utilities.String;
BEGIN
US := NewString('Demo');
END Demo;

BEGIN
NewString := Utilities.NewString;
END Untitled.Demo ~
8. BohdanT - 12 Января, 2009 - 02:31:49 - перейти к сообщению
Улыбка
BohdanT пишет:
А тут только с помощью процедурных переменных...
9. Wlad - 12 Января, 2009 - 11:10:58 - перейти к сообщению
MaDzi пишет:
...Но вот это работает:

...
VAR
NewString: PROCEDURE (CONST str :ARRAY OF CHAR): Utilities.String;
...
BEGIN
NewString := Utilities.NewString;
END Untitled.Demo ~

А чего б ему не работать? Если типы совпадают... Улыбка

Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0231]     [ Gzipped ]