下記のように関数の等価性について、シンプルなコードで学んでおります。
そこで一つわからない点があります。
print(z.a==x.a);//fales *here
についてですが、
print(z.a==y.a);//true
とがtrueに対して、それぞれ異なるインスタンスを参照しに行っているので、結果としてfalseを返してくるという「結果」は理解しているつもりです。
一方で、print(z.a==x.a);//fales *here
の場合、この真偽判定の評価において、何をどのようにして異なるインスタンスを参照しているのだろうという過程がわかりませんでしたDartpadでfalseになった内容を出力しても、以下のように出力されるだけで、異なるインスタンス由来であるという、評価の過程を知ることができませんでした。
print(z.a);//'A'のインスタンスのクロージャ'a$ 0'
print(x.a);//'A'のインスタンスのクロージャ'a$ 0'
特にメソッド自体にhashCodeのような属性があるのかなとも思ったのですが、実際にはどのように異なるインスタンスにおけるメソッドであると評価しており、それを何かしら出力することにより確認する術はあるのでしょうか?
dart
1class A { 2 void a () {} 3} 4 5 6void main(){ 7 var x = new A(); 8 var y = new A(); 9 10 var z = y; 11 12 print(z.a==y.a);//true 13 print(z.a==x.a);//fales *here 14 print(z.a);//'A'のインスタンスのクロージャ'a$ 0' 15 print(x.a);//'A'のインスタンスのクロージャ'a$ 0' 16}
それを知って、何かに応用したい状況なのでしょうか?
コメントありがとうございます。
いいえ、応用したい状況はございません。
提示コードで理解したことは、同じクラスからでも異なる生成したインスタンスのメソッドは真偽判定上falseを返すという事実です。
私が初心者だからかもしれませんが、この事実だけでは、正しくこの==オペレーターで真偽判定を利用することができないと感じたからです。
「Aさんは有能」であるという事実を知っても、「Aさんは高身長なのか」、「Aさんは優しいのか」ということは判定できず、甲という属性を持つものは、有能であり、高身長で優しいという特性を持っている。ここで「Aは甲である」という3段論法でしか理解ができない頭で、ともすればこれがプログラミング向きではない思考なのかもしれません。。。
そういう意味で、ここでの真偽判定の本質(甲)を知りたい、という趣旨での質問でございました。
回答3件
あなたの回答
tips
プレビュー