0

プレイヤー「X」からプレイヤー「O」に切り替える関数を定義しています。関数なしでこの小さなコードブロックを実行すると、Xが返されます。関数を定義してこれを実行すると、Oとして返されます。通常の実行と関数からの実行の違いは何ですか?

$playgame = "True"
$player = "O"

#Function
Switch-play
Write-host $player



#Switch Player turn
Function Switch-Play{
    if ($playgame = "True") {
        if ($player -eq "X") {$player = "O"}
        else {$player = "X"}
        }
}

ありがとう

編集:最初は、変数を$ script:playerとして定義することに疑問がありましたが、実際には何も解決しませんでした。

編集:Switch-playではなくSwitch-Playに変更

PS C:\Users\scout> $playgame = "True"
$player = "O"
$player
Switch-Play
$player
Switch-Play 
$player




#Switch Player turn
Function Switch-Play{
    if ($playgame = "True") {
        if ($player -eq "X") {$player = "O"}
        else {$player = "X"}
        }
}
O
O
O
4

2 に答える 2

2

ここで可変スコープの問題。関数を次のように変更します。

Function Switch-Play{
    if ($playgame) {
        if ($global:player -eq "X") 
            {
              $global:player = "O"}
        else 
            {                
              $global:player = "X"
            }
        }
}

範囲について読む: http://technet.microsoft.com/en-us/library/hh847849.aspx

于 2013-01-17T15:08:07.773 に答える
0

または、関数から player の値を返すこともできます。

Function Switch-Play
{
    param
    ( 
      $playgame,
      $player
    )
    if ($playgame -eq $true) 
    { 
        if ($player -eq "X") 
        {
            $player = "O"
        }
        else 
        {
            $player = "X"
        }
        $player
    }
}

$player = "O"
$player = Switch-play -playgame $true -player $player
Write-host $player
于 2013-01-17T16:14:35.117 に答える