Уникальная неуникальность (багофича?)

 

Оказывается можно назвать переменную и функцию одни и тем же именем :)

Я догадываюсь почему так: списки имен имен переменных и имен функций лежат в разных "таблицах" и "несмешиваются" ни при компиляции ни при исполнении. но - прикольный текст получается. Вот код:

int unique = 0;

void start()
{
  unique = unique(unique);
  Print(unique);
}

int unique(int unique)
{
  return(unique + 1);
}

компилируется - без ошибок. работает - как написано ( Print выводит единичку).

 
ForexTools >>:

Это фича, и это хорошо. В С++ к имеющимся в MQL4 добавляются еще две области именования -- неймспейсы и пользовательские типы.

namespace Unique
{
   class Unique;

   Unique Unique(Unique Unique)
   {
     return Unique;
   }
}
 
ForexTools >>:

Оказывается можно назвать переменную и функцию одни и тем же именем :)

Я догадываюсь почему так: списки имен имен переменных и имен функций лежат в разных "таблицах" и "несмешиваются" ни при компиляции ни при исполнении. но - прикольный текст получается. Вот код:

компилируется - без ошибок. работает - как написано ( Print выводит единичку).


ктстати, еще смешнее, если переменной присвоить имя start:)

 

Пример из джавы

class start
{
    private int start;
    public void start(int start) {
    }
}
 
ForexTools >>:

Оказывается можно назвать переменную и функцию одни и тем же именем :)

Я догадываюсь почему так: списки имен имен переменных и имен функций лежат в разных "таблицах" и "несмешиваются" ни при компиляции ни при исполнении. но - прикольный текст получается. Вот код:

компилируется - без ошибок. работает - как написано ( Print выводит единичку).


Я как MQL увидел (с пол-года назад), так это у меня сразу выяснилось - неосознанно, ясное дело.)))

 

Есть подозрение, что это выяснилось после прочтения справки по MQL5 ;) Дело в том, что я именно так и узнал об озвученной особенности MQL4. Потом стал пробовать еще одно описание в MQL5: можно создать две функции с одинаковым именем, но разным типом результата. Утверждается, что компилятор сам будет выбирать нужную функцию, подстраиваясь под тип данных, который участвует в выражении. Но эта "багофича" в MQL4 не работает.

 
Scriptong >>:

Есть подозрение, что это выяснилось после прочтения справки по MQL5 ;)

нет, это результат отладки кодировщика MQLEnigma. на одном из файлов у меня во внутренней процедуре была куча обращений к переменной, которая обзывалась как и функция. я знал что к этой функции было только одно обращение (инициализация), и сперва ошалел когда увидел что у меня больше десятка обращений к ней. когда начал искать где это - смотрю а переменная и функция одинаково обозваны. из за того что сильно "далеко" по тексту были разбросаны - оно мне на глаза и не попадалось....

кстати в 5-ке точно такая же багофича :)

 
Scriptong >>:

Потом стал пробовать еще одно описание в MQL5: можно создать две функции с одинаковым именем, но разным типом результата.

С разным типом РЕЗУЛЬТАТА или входных параметров? :-)

 
Scriptong >>:

Есть подозрение, что это выяснилось после прочтения справки по MQL5 ;) Дело в том, что я именно так и узнал об озвученной особенности MQL4. Потом стал пробовать еще одно описание в MQL5: можно создать две функции с одинаковым именем, но разным типом результата. Утверждается, что компилятор сам будет выбирать нужную функцию, подстраиваясь под тип данных, который участвует в выражении. Но эта "багофича" в MQL4 не работает.


))) Не, я по ошибке назвал ф-ю также как и имя переменной, которой присваивал ее рез-т. Чуть ли не в первый день знакомства с языком!

Нет. Не так было. В описании ф-ии присутствовала переменная с именем самой же ф-ии. Во как! (Вот такой я разгильдяй!))) И все работало. А потом уже целенаправленно проверил описанный вариант.

 

Есть подозрение, что это выяснилось после прочтения справки по MQL5 ;) Дело в том, что я именно так и узнал об озвученной особенности MQL4. Потом стал пробовать еще одно описание в MQL5: можно создать две функции с одинаковым именем, но разным типом результата. Утверждается, что компилятор сам будет выбирать нужную функцию, подстраиваясь под тип данных, который участвует в выражении. Но эта "багофича" в MQL4 не работает.

Это не баго фича, это статический полиморфизм.
 
C-4 >>:
Это не баго фича, это статический полиморфизм.

Эт че? Я такое сказал? :о

Ух ты, блин! :)))

Причина обращения: