У меня есть функция, которая устанавливает переменную для текущего пользователя. Имя переменной имеет префикс имени модуля — в основном, способ настройки приложения, Клиент — это класс, Сервер — это класс, Агентство — это класс и так далее. Это попытка создать систему, с помощью которой мы можем узнать любую ключевую информацию о клиенте или одном из его веб-сайтов на более чем 200 серверах с минимальным количеством кликов и с использованием оперативных данных из их БД.
Функция выглядит следующим образом:
public sub setVariable(varName, varValue)
varValue = cstr(varValue)
def = ""
if varValue = "" then def = "1"
response.write vbcrlf & "Variable: " & varName & " : " & varValue & vbcrlf
if not cstr("" & getVariable(varName, def)) = cstr("" & varValue) then
response.write vbcrlf & varName & " : " & varValue & vbcrlf
prepend varName, "Module." & Name & "."
response.write vbcrlf & varName & " : " & varValue & vbcrlf
session(varName) = varValue
Core.RunSproc "SetUserVariable", array("@name", "@value"), array(varName, cstr(varValue)), setVar
end if
end sub
Теперь в строке 5, где она выводится первой, в качестве имени переменной выводится только "ID". Однако двумя строками позже имя устанавливается на "Module.‹module-name›.ID" (например, Module.Server.ID. Через 2 строки после этого, после оператора prepend (который действует так же, как выполнение varName = "something" & varName
), он выводит something + "Module.<module-name>.ID"
. Фактически, в этом случае он выводит "Module.Server.Module.Server.ID"
. Обратите внимание, что если я что-то вынимаю, это вынимается из первого Module.Server, но не из второго. Кто-нибудь знает, что вызывает это? хотя Module.Server добавляется к имени переменной между строками 5 и 7, но единственная строка там — оператор if.
byref
. Таким образом, при вызовеgetVariable
я фактически добавлял Module.Server. там тоже, и поскольку это былоbyref
, переменная сохранила значение. Я оставлю этот вопрос и вскоре добавлю ответ, если он кому-то поможет. - person ClarkeyBoy   schedule 10.05.2013