Asp Classic поместил Sub в функцию Can i?

зачем теперь возвращать....Синтаксическая ошибка

Могу ли я поместить подпрограмму в функцию? Или лучший способ для этого?!

Function SumerizePlanArrays(f_String, f_Type)

   Set dic = CreateObject("Scripting.Dictionary")
   Sub Add(s)
       weight = Split(s,"$")(0)
       values = Split(s,"$")(1)
       pipes = Split(values, "|")
       For Each line In pipes
           val = Split(line, ",")
           if f_Type = 1 then
               dic(val(1)) = (dic(val(1))*weight/100) + CInt(val(2))
           elseif f_Type = 2 then
               dic(val(1)) = dic(val(1)) + CInt(val(2))
           end if
       Next
   End Sub

   arrString = Split(f_String,"#")
   For i = 0 to UBound(arrString)
       'wei = Split(arrString(i),"$")(0)
       Add arrString(i)
   Next

   Set a = CreateObject("System.Collections.ArrayList")
   For Each key In dic.Keys
       a.Add "0," & key & "," & dic(key)
   Next
   a.Sort
   result = Join(a.ToArray, "|")

   SumerizePlanArrays = result

End Function

Ошибка компиляции Microsoft VBScript «800a03ea»

Ошибка синтаксиса

/inc_func_projects.asp, строка 2592

Дополнительные добавления
^


person sadrasjd    schedule 05.11.2015    source источник
comment
Эээ... Почему? Функция предназначена для возврата значения, тогда как Sub этого не делает, но оба являются отдельными блоками кода с определенной целью.   -  person Paul    schedule 05.11.2015
comment
Вы также можете работать с классом, тогда у него могут быть свои методы.   -  person Shadow Wizard Wearing Mask V2    schedule 06.11.2015
comment
Вы можете поместить функцию или подпрограмму в другую, создав ее динамически внутри родителя с помощью кода e. грамм. Execute "Sub Message(x): MsgBox x: End Sub", эта подпрограмма не отображается в глобальной области видимости, ее можно вызывать только внутри родителя, и она живет до конца родителя. Но этот трюк не даст вам таких возможностей, как замыкания в JavaScript, так как вложенная подпрограмма не имеет доступа к родительской области видимости, она работает только в глобальной области видимости.   -  person omegastripes    schedule 06.11.2015


Ответы (1)


Нет - вы не можете поместить подпрограмму в функцию, кроме как в JavaScript или в версии на стороне сервера, называемой JScript. Однако VBScript и JScript — это два совершенно разных языка.

Ты должен делать это...

Function SumerizePlanArrays(f_String, f_Type)

   Set dic = CreateObject("Scripting.Dictionary")

   arrString = Split(f_String,"#")
   For i = 0 to UBound(arrString)
       'NOTE: Updated the call to reflect comment by sadrasjd...
       Add arrString(i, f_Type, dic)
   Next

   Set a = CreateObject("System.Collections.ArrayList")
   For Each key In dic.Keys
       a.Add "0," & key & "," & dic(key)
   Next
   a.Sort
   result = Join(a.ToArray, "|")

   SumerizePlanArrays = result

End Function

Sub Add(s, type, dic)
    'NOTE: ^Updated the parameters to reflect comment by sadrasjd^
    weight = Split(s,"$")(0)
    values = Split(s,"$")(1)
    pipes = Split(values, "|")
    For Each line In pipes
        val = Split(line, ",")
        if type = 1 then
            dic(val(1)) = (dic(val(1))*weight/100) + CInt(val(2))
        elseif type = 2 then
            dic(val(1)) = dic(val(1)) + CInt(val(2))
        end if
    Next
End Sub

ПРИМЕЧАНИЕ. Вызов обновлен с учетом предложения sadrasjd.

person Paul    schedule 05.11.2015
comment
@sadrasjd Если это решило проблему, подумайте о том, чтобы принять это. См. Что делать, когда кто-то отвечает на мой вопрос? - person user692942; 05.11.2015
comment
Это как раз решение вопроса, который вы задали. Если вы хотите, чтобы я взглянул на логику кода, я могу. Есть несколько изменений, которые я бы сделал. - person Paul; 05.11.2015
comment
@Paul Да, например, использовать старый добрый Array() для начала... Set a = CreateObject("System.Collections.ArrayList") фу! - person user692942; 05.11.2015
comment
@Lankymart: Хе-хе! С чего-то надо начинать... Первые две строчки в абзаце меня немного беспокоят. Кроме того, Option Explicit не установлен. - person Paul; 05.11.2015
comment
@sadrasjd: Вам действительно следует включить Option Explicit; это избавит вас от боли позже. - person Paul; 05.11.2015
comment
@Paul, на самом деле сабвуфер можно поместить в функцию. Динамически. - person omegastripes; 06.11.2015
comment
@Paul, пожалуйста, прокрутите вверх до моего комментария к вопросу. - person omegastripes; 06.11.2015
comment
@Paul,@omegastripes,@Lankymart,Спасибо всем, кто принял участие - person sadrasjd; 07.11.2015
comment
@omegastripes: О! Бог! Это ужасно! - person Paul; 09.11.2015
comment
@sadrasjd: Нет проблем. Удачи :о) - person Paul; 09.11.2015