1

Тема: VBS: как определить имя родительской функции

Коллеги, подскажите - как в vbscript внутри функции определяется, если это конечно реально, имя родительской функции-процедуры, которая вызывала текущую? Или номер вложенности, если таковое имеется?

WBR. Roman

2

Re: VBS: как определить имя родительской функции

Мне, например, такое не известно.

А какова цель?

3

Re: VBS: как определить имя родительской функции

Пара функций была изначально задумана для отдельного использования (вызываются кнопками в HTA) и результат своей работы они выводили диалоговыми окнами, сейчас я возвращаемый ими результат использую еще и из процедуры, в ходе которой наличие диалогов уже нежелательно.
Думал отсечь вывод диалога по имени "родителя", но видимо прийдется просто добавить в функции параметр для определения необходимости вывода диалогов.

Гуру, по ходу еще вопрос - в пользовательских vbscript-овых функциях можно организовать необязательные параметры ?

WBR. Roman

4 (изменено: Rumata, 2012-08-16 11:10:25)

Re: VBS: как определить имя родительской функции

Rom5 пишет:

можно организовать необязательные параметры ?

Я не гуру, но отвечу. Нет, но есть обходное решение. В некоторой степени красивое.



function max(a)
	if not isarray(a) then
		max = a
		exit function
	end if

	max = a(0)
	for i = 1 to ubound(a)
		if a(i) > max then
			max = a(i)
		end if
	next
end function

WScript.Echo max(100)
WScript.Echo max(array(200, 300, 100))
( 2 * b ) || ! ( 2 * b )

5

Re: VBS: как определить имя родительской функции

class xxx
    dim a, b ,c
    function x()
        x = a & b & c
    end function
end class

set x=new xxx
x.a=1
x.b=2

msgbox x.x()

x.c=3

msgbox x.x()
Я конечно далек от мысли... (с)

6

Re: VBS: как определить имя родительской функции

Rom5 пишет:

Пара функций была изначально задумана для отдельного использования (вызываются кнопками в HTA) и результат своей работы они выводили диалоговыми окнами, сейчас я возвращаемый ими результат использую еще и из процедуры, в ходе которой наличие диалогов уже нежелательно.

Разделяйте логику программы (подпрограммы) от интерфейса. Задача вычисляющей подпрограммы выполнять только вычисления. Вывод диалоговых окон - не ее забота. Перепишите функции так, чтобы они выполняли только необходимые действия. Взаимодействие с пользователем вынесите наружу, за пределы Ваших функций.

( 2 * b ) || ! ( 2 * b )

7

Re: VBS: как определить имя родительской функции

Спасибо за рекомендации и примеры с массивами и классами!

WBR. Roman