相同的代码但不同的结果
Posted
技术标签:
【中文标题】相同的代码但不同的结果【英文标题】:Same code but different result 【发布时间】:2013-05-28 09:40:46 【问题描述】:我有一个奇怪的问题,有两个相同的代码:
第一个:
$arraysch= @()
$hash = @
Add-Type -Path "C:\app\aasif\product\11.2.0\client_2\odp.net\managed\common\Oracle.ManagedDataAccess.dll"
$con = New-Object Oracle.ManagedDataAccess.Client.OracleConnection("User Id=sys;Password=password;Data Source=Myserver/oracle;DBA privilege=SYSDBA")
$con.Open()
$cmd=$con.CreateCommand()
$cmd.CommandText="select distinct owner from all_tables where table_name = 'Mytable'"
$rdr=$cmd.ExecuteReader()
while ($rdr.Read())
$arraysch += $rdr.GetString(0)
$hash["Myserver"] = [array]$arraysch
$con.close()
还有第二个,谁在起作用,但它是一样的:
$arraysch= @()
$hash = @
Add-Type -Path "C:\app\aasif\product\11.2.0\client_2\odp.net\managed\common\Oracle.ManagedDataAccess.dll"
function GetOracleDb
param([string]$servername)
$con = New-Object Oracle.ManagedDataAccess.Client.OracleConnection("User Id=sys;Password=password;Data Source=$servername/oracle;DBA privilege=SYSDBA")
$con.Open()
$cmd=$con.CreateCommand()
$cmd.CommandText="select distinct owner from all_tables where table_name = 'Mytable'"
$rdr=$cmd.ExecuteReader()
while ($rdr.Read())
$arraysch += $rdr.GetString(0)
$hash[$servername] = [array]$arraysch
$con.close()
GetOracleDb "Myserver"
第一个代码在我的 $hash 中给出了这个结果
我的服务器 TEST1, TEST2, TEST3, TEST4...
第二个给我这个
我的服务器 TEST1TEST2TEST3TEST4TEST5TEST6
为什么当我将代码放入函数时,$hash 值中没有逗号?
【问题讨论】:
您是否尝试过在函数中初始化$arraysch= @()
和$hash = @
然后返回它们?
【参考方案1】:
这是 powershell 2.0 和 3.0 之间的区别。我使用以下代码重现您的麻烦。
$arraysch= @()
$hash = @
function test
param([string]$servername)
$arraysch += "A"
$arraysch += "B"
$hash[$servername] = [array]$arraysch
test "coucou"
$hash
它适用于 PowerShell 2.0 而不是 PowerShell 3.0。出于某种原因,在 PowerShell 3.0 中,函数 $arraysch
不被视为一个集合,而是一个 string
,所以 $arraysch += $rdr.GetString(0)
只是连接字符串。只是在函数里面写$arraysch= @()
解决问题,但我不明白其中的区别。
在 PowerShell 3.0 中,它适用于:
$hash = @
function test
param([string]$servername)
$arraysch= @()
$arraysch += "A"
$arraysch += "B"
$hash[$servername] = [array]$arraysch
test "coucou"
$hash
或:
$arraysch= @()
$hash = @
function test
param([string]$servername)
$global:arraysch += "A"
$global:arraysch += "B"
$hash[$servername] = [array]$arraysch
test "coucou"
$hash
【讨论】:
以上是关于相同的代码但不同的结果的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 和 Android 中使用相同的代码但垂直边距的结果不同的 React Native 应用程序