Asp Classic поставя Sub във функцията Can i?

защо сега се връща ....Синтактична грешка

Мога ли да поставя Sub рутина във функцията? Или по-добър начин за това?!

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
Errr... Защо? Функцията е предназначена да връща стойност, докато 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)


Не – не можете да поставите sub във функция, освен в 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, всъщност sub може да бъде поставен във функция. Динамично. - person omegastripes; 06.11.2015
comment
@Paul, моля, превъртете нагоре до моя коментар за въпроса. - person omegastripes; 06.11.2015
comment
@Пол,@omegastripes,@Lankymart,Благодаря на всички, които участваха - person sadrasjd; 07.11.2015
comment
@omegastripes: О! Бог! Това е отвратително! - person Paul; 09.11.2015
comment
@sadrasjd: Няма проблеми. Успех :o) - person Paul; 09.11.2015