2017-01-02 11 views
0

これはtrueの代わりにfalseを出力しています。どうしてこれなの?Nand to Tetris:文字列の等価性テストが機能しない

class Main { 
    function void main() { 
    var String foo; 
    let foo = "bar"; 

    if (foo = "bar") { 
     do Output.printString("true"); 
    } 
    else { 
     do Output.printString("false"); 
    } 

    return; 
    } 
} 

私はジャックでnote that(各オブジェクトの開始アドレスが同じであるかどうかをfoo"bar"が各オブジェクトであるからだと疑い、そして=テストは、平等は単一イコールではなく、二重にするためにテストされていますトリプルイコール)。私はまだこの仮説が真実かどうかを発見する10/11の章には行きませんでした。

+0

前回の回答をもう一度削除しました。単一の等号が有効であれば、文字列に対して2つの表現があることを前提としています。 –

+0

@OliverHader大丈夫、ありがとう。 –

答えて

1

遅くて申し訳ありませんが、こちらが来ます。あなたのプログラムは、 "bar"の出現ごとにヒープ上に文字列を動的に作成し、コードはヒープ上の2つの異なるアドレスを比較します。比較は偽です。

どうすればわかりますか?私はちょうどコンパイラを書き終えました...

関連する問題