термин добавляется к строке без инструкций для этого

У меня есть функция, которая устанавливает переменную для текущего пользователя. Имя переменной имеет префикс имени модуля — в основном, способ настройки приложения, Клиент — это класс, Сервер — это класс, Агентство — это класс и так далее. Это попытка создать систему, с помощью которой мы можем узнать любую ключевую информацию о клиенте или одном из его веб-сайтов на более чем 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.


person ClarkeyBoy    schedule 10.05.2013    source источник
comment
Кажется, я нашел ответ. Дело в том, что ASP автоматически предполагает, что переменные, вводимые в функции, являются byref. Таким образом, при вызове getVariable я фактически добавлял Module.Server. там тоже, и поскольку это было byref, переменная сохранила значение. Я оставлю этот вопрос и вскоре добавлю ответ, если он кому-то поможет.   -  person ClarkeyBoy    schedule 10.05.2013
comment
См. эту ссылку stackoverflow.com/questions/1537819/byref- и-byval-в-vbscript   -  person Nathan Rice    schedule 11.05.2013


Ответы (1)


Кажется, я нашел ответ. Дело в том, что ASP автоматически предполагает, что переменные, вводимые в функции, являются по ссылке. Таким образом, при вызове getVariable я фактически добавлял «Module.Server». там тоже, и поскольку это была ссылка, переменная сохранила значение.

С уважением, Кларки

person ClarkeyBoy    schedule 12.05.2013
comment
+1, это задокументированное поведение: msdn. microsoft.com/en-us/library/tt223ahx%28v=vs.84%29.aspx - person Cheran Shunmugavel; 13.05.2013
comment
да, я понимаю это сейчас, но, к сожалению, не в течение нескольких месяцев, пытаясь сузить источник проблемы. Только когда я понял, с каким префиксом идут переменные, я понял, что это должно быть связано с этими функциями. Спасибо за ссылку. Это поведение я никогда не забуду! - person ClarkeyBoy; 14.05.2013