String VBScript变量丢失其内容?

String VBScript变量丢失其内容?,string,file,vbscript,String,File,Vbscript,我有以下代码。它所做的是从属性文件中读取所有的key,vlaues Function readProperties(fileName) Dim oFS : Set oFS = CreateObject( "Scripting.FileSystemObject" ) Dim dicProps : Set dicProps = CreateObject( "Scripting.Dictionary" ) Dim oTS : Set oTS = oFS.OpenTextFile

我有以下代码。它所做的是从属性文件中读取所有的key,vlaues

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 函数readProperties(文件名) Dim oFS:Set oFS=CreateObject(“Scripting.FileSystemObject”) Dim dicProps:Set dicProps=CreateObject(“Scripting.Dictionary”) Dim oTS:设置oTS=oFS.OpenTextFile(文件名) 直到oTS.AtEndOfStream 尺寸线:尺寸线=修剪(oTS.ReadLine) 'Wscript.Echo sLine 如果“sLine”那么 如果不是“#”=左(sLine,1),则 Dim aParts:aParts=拆分(sLine,“=”) 如果1个UBound(aParts),则 WScript.Echo oTS.Line,“坏的属性行”,sLine 其他的 'Wscript.Echo“添加:”&aParts(0)&“=>”&aParts(1) dicProps(附件(0))=附件(1)) 'WScript.Echo oTS.Line,“良好的建筑红线”,sLine 如果结束 如果结束 如果结束 环 加油,加油 'readProperties=dicProps 迪姆·斯凯 为每一个在dicProps中的sKey。键 WScript.Echo sKey,“=>”,dicProps(sKey) 下一个 端函数 奇怪的是,如果我将
dicProps
的值赋给
readProperties
,代码就不再工作了

我在这方面遗漏了什么吗?

使用

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

(没有足够的分数进行评论,因此作为答案发布)

让我试着总结一下上面正确但有点混乱的答案:

  • 使用对象时,首选语法是
    Set objVar2=objVar1
    ,而标量是用
    Var2=Var1
    指定的。基本方言删除了变量值赋值曾经需要的Let
    Let Var2=Var1
  • 从方法(函数)返回值时,语法为
    FunctionName=Result
    ,遵循变量类型赋值规则,即

    函数MyObject()
    '指定一个对象作为返回值
    设置MyObject=Result
    结束功能

    函数MyScalar()
    '指定一个标量作为返回值
    MyScalar=结果
    结束功能


函数名为
readProperties
。在vbscript中设置
[functionName]=[value]
是在指定返回值。@KP:True,并且每当您将对象引用分配给变量时,都必须使用Set。您是否同意将函数“myfunction”中的对象设置为变量名称“myfunction”可能不是一个好主意,当名称用于传回值时??这是一个糟糕的设计气味,我只是在函数中间分配返回值的原因是因为我在想什么是错的。最后一部分(对于每条语句)实际上不是函数的一部分。@KP:在我看来,似乎意图是返回一个值,毕竟如果没有意图返回值,则应使用
Sub
。底部的代码看起来像一些诊断,一旦功能被认为正常工作,就会被删除。真正的目标是让函数创建并返回字典。