powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / две функции одно название?
33 сообщений из 33, показаны все 2 страниц
две функции одно название?
    #39312367
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, форумчане.
Как известно, в VBA среди строковых функций есть функции с одинаковыми названиями (почти), но возвращающие/принимающие разные типы значений
Код: vbnet
1.
2.
3.
4.
5.
Chr$(CharCode As Long) As String
Chr(CharCode As Long)

Left$(String As String, Length As Long) As String
Left(String, Length As Long)

Различие только в символе доллар ($).

Как бы самому такое написать?
...
Рейтинг: 0 / 0
две функции одно название?
    #39312371
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург,

А что мешает? Бери и добавляй символы типа $ для обозначения типа переменной или функции вместо использования As и типа данных после объявления, их несколько символов, посмотри в хелпе.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312374
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShinПанург,

А что мешает? Бери и добавляй символы типа $ для обозначения типа переменной или функции вместо использования As и типа данных после объявления, их несколько символов, посмотри в хелпе.Пробовал?
...
Рейтинг: 0 / 0
две функции одно название?
    #39312382
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПанургMrShinПанург,

А что мешает? Бери и добавляй символы типа $ для обозначения типа переменной или функции вместо использования As и типа данных после объявления, их несколько символов, посмотри в хелпе.Пробовал?
Я не пробовал но попробую.
А в чем дело? (символ не дает вставить).
Даже интеоесно.
Попробовал все создается, а в чем пробдемы.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312384
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, не обратил внимания, что нужно именно 2 функции. Нет, это нельзя, с полиморфизмом и наследованием у Акцесса беда.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312395
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROIПопробовал все создается, а в чем пробдемы.Прочти внимательно заголовок топика.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312399
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПанургROIПопробовал все создается, а в чем пробдемы.Прочти внимательно заголовок топика.
Я это прочитал но потом посмотрел что вы ввиду имели.

Заголовок "Две функции одно название" а ниже вы сами и поправляетесь.
>> Как известно, в VBA среди строковых функций есть функции с одинаковыми названиями (почти)
И чего это я не правильно увидел?
...
Рейтинг: 0 / 0
две функции одно название?
    #39312408
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПанургКак бы самому такое написать?
Знак доллара - это квалификатор типа значения, с ним возвращается String, а без него Variant(String). А имя у этих функций совпадает.
В модуле такую пару определить не удастся.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312429
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, это я и сам знаю. Но ведь они существуют, значит как-то можно...
...
Рейтинг: 0 / 0
две функции одно название?
    #39312445
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПанургНо ведь они существуют, значит как-то можно...
Совсем не факт. VBA вряд ли писан на самом VBA, а там можно было сделать как угодно. Нет полиморфизма, хоть ты тресни, не сделаешь две функции с одинаковым именем, но разными типами данных в одном модуле. В разных модулях сделать - они будут просто перегружать друг друга, если модули формы и стандартный или генерировать ошибку, если оба стандартные модули.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312449
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПанургAkina, это я и сам знаю. Но ведь они существуют, значит как-то можно...
Попробовал создать две функции под одним именем с доларом(не дает)
Тогда может другой символ выбрать или нужен именно знак доллара?
...
Рейтинг: 0 / 0
две функции одно название?
    #39312450
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShin, публичные функции с одинаковым именем в одном проекте не могут существовать...

Меня интересует именно создание подобных функций, как указаны в стартовом топике. Про всё остальное я знаю.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312459
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПанургMrShin, публичные функции с одинаковым именем в одном проекте не могут существовать...

Меня интересует именно создание подобных функций, как указаны в стартовом топике. Про всё остальное я знаю.
Дык создавайте их в разных модулях.
Или я чего-то не догоняю.
С уважением.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312462
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROIТогда может другой символ выбрать или нужен именно знак доллара? это не знак доллара, это сокращённые обозначения типа возвращаемого значения ( As String ). Существуют и другие - & - Long , #-Double, % -Integer и т.д.

Меня интересует именно создание подобных функций, как указаны в стартовом топике.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312465
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROIПанургMrShin, публичные функции с одинаковым именем в одном проекте не могут существовать...

Меня интересует именно создание подобных функций, как указаны в стартовом топике. Про всё остальное я знаю.
Дык создавайте их в разных модулях.
Или я чего-то не догоняю.
С уважением.
Однако если функция будет публично то наверно не VBA не даст.
У меня зуд по всему телу (а зачем это)?
С уважением.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312467
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROIДык создавайте их в разных модулях.Как я их буду создавать если

Панург... публичные функции с одинаковым именем в одном проекте не могут существовать ...

И всё же...
...
Рейтинг: 0 / 0
две функции одно название?
    #39312472
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROIа зачем этоБудем считать - спортивный интерес.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312477
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панургэто не знак доллара
Создал:
Public Function Chrr$()

End Function

Объект браузер показывает именно знак доллара
Chr$
...
Рейтинг: 0 / 0
две функции одно название?
    #39312478
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панургпубличные функции с одинаковым именем в одном проекте не могут существовать
Так я и говорю, что нельзя объявить функции с одинаковым именем в стандартном модуле, даже если они разные, а если одна публичная функция в стандартном модуле, а другая в модуле формы или класса, то пожалуйста, это уже метод будет, а не чисто функция.

Меня тоже этот вопрос интересовал в свое время, ответ - нельзя.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312498
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург,

в одном модуле создал функцию
Код: vbnet
1.
2.
3.
4.
Public Function ch$()
ch$ = "иванов"
Debug.Print TypeName(ch$)
End Function



в другом модуле - функцию
Код: vbnet
1.
2.
3.
4.
Public Function ch() As Long
ch = 12345
Debug.Print TypeName(ch)
End Function



компилируется без проблем, в Immediate получаю
Код: vbnet
1.
2.
3.
4.
5.
6.
?module1.ch
String
иванов
?module2.ch
Long
 12345 



может чего недопонял? не это интересовало?
...
Рейтинг: 0 / 0
две функции одно название?
    #39312506
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_rusimport, интересовало в одном конечно...
В твоём варианте имена то всё равно разные - module1.ch и module2.ch

Если в разных модулях объявить такие функции проект конечно скомпилируется (так у меня получилось), но при вызове ошибка времени исполнения
---------------------------
Microsoft Visual Basic
---------------------------
Compile error:

Ambiguous name detected: ttt
---------------------------
ОК Справка
---------------------------
...
Рейтинг: 0 / 0
две функции одно название?
    #39312508
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_rusimport, всё это не принципиально и не горит. Просто стало интересно - возможно ли повторить...
...
Рейтинг: 0 / 0
две функции одно название?
    #39312515
MrShinНет полиморфизма, хоть ты тресниСъем свою шляпу, если InStr(), например, не полиморфная функция. Вы понимаете этот термин в очень узком смысле.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312524
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й квартал, а ты по вопросу скажешь чего? Возможно ли реализовать?
...
Рейтинг: 0 / 0
две функции одно название?
    #39312560
Панург,

думаю.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312576
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й кварталСъем свою шляпу, если InStr(), например, не полиморфная функция
Конечно полиморфная. Имелось в виду классическое определение, когда для разных типов переменных выполняется разный код.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312583
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й кварталПанург,

думаю.
Думай быстрей (нам интересно же).
Без сарказма.
...
Рейтинг: 0 / 0
две функции одно название?
    #39312972
Надумались пока что две мысли:
1) Если брать только VBA, надумал как сделать с квадратными скобками, например [MyFunc]() и [MyFunc$](), или MyFunc() и [MyFunc$](), но не MyFunc() и MyFunc$(). Пример прилагаю (см. процедуру Test). Там есть трюки с атрибутами, поэтому истинные тексты классов прилагаю отдельно (Predeclared будет доволен).
2) В библиотеке типов видно, что имена таких функций декорируются особым образом (ну, и имеют соответствующий тип результата):
Код: plaintext
1.
2.
3.
4.
5.
	Line 227:         BSTR _stdcall _B_str_Chr([in] long CharCode);
	Line 229:         VARIANT _stdcall _B_var_Chr([in] long CharCode);
	Line 231:         BSTR _stdcall _B_str_LCase([in] BSTR String);
	Line 233:         VARIANT _stdcall _B_var_LCase([in] VARIANT* String);
и т. д.

Хм, я ожидал чего-нибудь более мощного, вроде специального атрибута IDL. Надо написать свою DLL и библиотеку типов, посмотреть, что выйдет.
...
Рейтинг: 0 / 0
две функции одно название?
    #39313100
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й квартал, пока это получается развитие мысли guest_rusimport 19690511 - 2 модуля (класса)=2 функции/процедуры. Плюс добавилась имитация обозначения строкового варианта с $.
К сожалению, пока это малоприменимо... Или я не понял?
...
Рейтинг: 0 / 0
две функции одно название?
    #39313814
Панург13-й квартал, пока это получается развитие мысли guest_rusimport 19690511 - 2 модуля (класса)=2 функции/процедуры. Плюс добавилась имитация обозначения строкового варианта с $.
К сожалению, пока это малоприменимо... Или я не понял?Да, два модуля (класса), но можно не специфицировать составной идентификатор (с точкой). Вопрос из чистого любопытства (не в защиту варианта) - малоприменимо почему?


Возвращаясь к вопросу "как это было сделано", моё предположене подтвердилось: VBA смотрит на префикс имени функции в библиотеке типов. Но совсем "как надо" сделать не получилось - хоть Object Browser и утверждает, что функции попали в Global Namespace, идентификатор приходится-таки писать составной, иначе - "Variable not defined". Дожать, наверное, можно, но это будет комбинация C/C++ и IDL (что, насколько я понимаю, тоже "не по ТЗ").
...
Рейтинг: 0 / 0
две функции одно название?
    #39313817
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й кварталВопрос из чистого любопытства (не в защиту варианта) - малоприменимо почему?Вообще-то блажь конечно. но хотелось сделать свойства у класса возвращающие/принимающие одно и то же (визуально), но разных типов - True/False-"Yes"/"No", 1.2/2.0 - "1.2"/"2.0" и т.д. и подчеркнуть это соответствующим квалификатором (ну так хотелось, а вдруг!). Класс занимается парсингом/формированием особым образом структурированных текстовых файлов.
Была надежда на недокументированные способы. Ну и в познавательном аспекте...
...
Рейтинг: 0 / 0
две функции одно название?
    #39314577
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
возвращаясь к началу топика
Панург...есть функции с одинаковыми названиями (почти), но возвращающие/принимающие разные типы значений...

а если использовать неявное преобразование типов?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Function fff(ddd)
fff = ddd
Debug.Print TypeName(fff)
End Function

?fff(true)
Boolean
True
?fff(1.2)
Double
 1,2 
?fff("привет")
String
привет
?fff(123)
Integer
 123 
...
Рейтинг: 0 / 0
две функции одно название?
    #39314766
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_rusimportвозвращаясь к началу топика
Панург...есть функции с одинаковыми названиями (почти), но возвращающие/принимающие разные типы значений...

а если использовать неявное преобразование типов?...В функциях такое прокатит вне сомнения, но в последнем посте я написал, что это надо для свойств ( Property ). А вот тут затык...
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / две функции одно название?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]