1

2 つの質問があります。

  1. 次のコードがある場合:

    private boolean handleCollision(Rectangle_Double test)
    {
        Rectangle_Double s = test;
        s.setLocation(s.X+xVelocity, s.Y);
    }
    

渡された Rectangle_Double を変更していますか? もしそうなら、渡された Rectangle_Double をコピーして変更する最良の方法は何でしょうか?

次に、これを Python で次のようにコーディングするとします。

def handleCollision(collidedLands, testRectangle)
    s = testRectangle
    s.setLocation(s.X+xVelocity, s.Y)

渡された testRectangle を変更していますか? もしそうなら、渡された testRectangle をコピーして変更する最良の方法は何でしょうか?

ありがとう!

4

2 に答える 2

2

私は Java を話せませんが、Python の質問に答えるには:

  1. はい、testRectangle を変更しています。

  2. 変更したくない場合は、新しい長方形を作成して返します。

長方形のコンストラクターがあると仮定すると、次のようになります。

def handleCollision(collidedLands, testRectangle):
    newRectangle = Rectangle(testRectangle.X + xVelocity, testRectangle.Y)
    return newRectangle
于 2012-11-06T06:42:59.060 に答える
2

Python も Java も値渡ししかありません。Python のすべての値は参照です。Java の場合と同様に、すべての非プリミティブ値は参照です。どちらの言語でもオブジェクトは値ではありません。受け渡しと参照のセマンティクスは、どのような名前で呼び出しても、ほとんど同じです。

したがって、Java コードは次のようになります。

private void handleCollision(Rectangle_Double test)
{
    Rectangle_Double s = test;
    s.setLocation(s.X+xVelocity, s.Y);
}

同等の Python コードと同じです:

def handleCollision(self, test):
    s = test
    s.setLocation(s.X+xVelocity, s.Y)

前に述べたように、オブジェクトはどちらの言語でも値ではありません。どちらの場合も渡される値は参照 (オブジェクトへのポインター) です。Python と Java のすべてのオブジェクトは、参照を通じて操作する必要があります。すべての型と同様に、参照は値によって渡されます。

于 2012-11-06T10:10:39.810 に答える