VBScript变量丢失其内容?

时间:2010-02-12 20:26:15

标签: string file vbscript

我有以下代码。它的作用是它从属性文件中读取所有关键的值。

Function readProperties(fileName)
    Dim oFS : Set oFS = CreateObject( "Scripting.FileSystemObject" )
    Dim dicProps : Set dicProps = CreateObject( "Scripting.Dictionary" )
    Dim oTS : Set oTS = oFS.OpenTextFile( fileName )
        Do Until oTS.AtEndOfStream
            Dim sLine : sLine = Trim( oTS.ReadLine )
            'Wscript.Echo sLine
            If ""  sLine Then
                If not "#" = Left( sLine, 1 ) Then

                    Dim aParts : aParts = Split( sLine, "=" )
                    If 1  UBound( aParts ) Then
                        WScript.Echo oTS.Line, "bad property line", sLine
                    Else
                    'Wscript.Echo "Adding: " & aParts( 0 ) &" => " & aParts( 1 )
                        dicProps( Trim( aParts( 0 ) ) )  = Trim( aParts( 1 ) ) 
                    'WScript.Echo oTS.Line, "good property line",  sLine
                    End If

                End If
            End If
        Loop
    oTS.Close

    'readProperties = dicProps

    Dim sKey
    For Each sKey In dicProps.Keys
        WScript.Echo sKey, "=>", dicProps( sKey )
    Next
End Function

奇怪的是,如果我将dicProps的值分配给readProperties,则代码将不再有效。

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

使用

Set readProperties = dicProps

在处理对象时,您总是必须使用Set。

答案 1 :(得分:-1)

(没有足够的评论要点,因此发布为答案)

让我尝试从上面总结正确但有点混乱的答案:

  • 使用对象时,首选语法为Set objVar2 = objVar1,而标量则指定为Var2 = Var1。 BASIC方言放弃了曾经要求的 Let Let Var2 = Var1)以进行变量值分配。
  • 从方法(函数)返回值时,语法为FunctionName = Result,遵循变量类型分配的规则,即

    Function MyObject() ' Assign an object as the return value Set MyObject = Result End Function

    Function MyScalar() ' Assign a scalar as the return value MyScalar = Result End Function