[過去ログ]
Rust part24 (1002レス)
Rust part24 http://mevius.5ch.net/test/read.cgi/tech/1716759686/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
797: デフォルトの名無しさん [] 2024/07/13(土) 00:02:12.31 ID:mV5TIlCk 親子関係のようなオブジェクト間で相互参照するならWeakを使う これはRcやArcから作るもので、「メインの所有者とそれを弱参照する共有相手」の関係になる Weak側は相手がまだ存在することを確認できないと参照できないというもの http://mevius.5ch.net/test/read.cgi/tech/1716759686/797
815: デフォルトの名無しさん [] 2024/07/13(土) 11:36:15.00 ID:mV5TIlCk よく分からんけど fn do_somethg(x: impl T) にS型のオブジェクトoを渡すなら、do_somethingにとって o is T が成り立つんじゃない? この関数は渡された o が S1 なのか S2 なのかは認識しないのだし http://mevius.5ch.net/test/read.cgi/tech/1716759686/815
818: デフォルトの名無しさん [] 2024/07/13(土) 11:54:54.91 ID:mV5TIlCk それはコンパイルのされ方の話であって意味の上での問題ではない気がする Box<dyn T> なら動的ディスパッチされるわけだし let x: T = ... のような変数を作れないという意味ならその通りだけど、それはオブジェクト指向言語におけるインターフェースでも同じでは (それともインターフェースに対してLSPは成り立たない?) http://mevius.5ch.net/test/read.cgi/tech/1716759686/818
824: デフォルトの名無しさん [] 2024/07/13(土) 12:40:54.94 ID:mV5TIlCk >>821 >>812 を字義通りに解釈するならそうだけど、その文章はC#やJavaが登場する前の1988年のもので、現在のオブジェクト指向にそのまま適用して良いのか?と思う インターフェースでない、実体のあるクラスの継承関係についてしか言えなくなるし 現在だとリスコフの置換原則は抽象インターフェースも含んで説明される方が多いように思う 「クラスを継承する際のみに適用できるルール」のように説明されてるのは、少なくとも自分は見たことがない http://mevius.5ch.net/test/read.cgi/tech/1716759686/824
830: デフォルトの名無しさん [] 2024/07/13(土) 15:25:32.20 ID:mV5TIlCk >>829 意味の上で考えるとしても「常に」は満たさないかと struct MyString(String); impl Clone for MyString { fn clone(&self) -> Self { Self("元の文字列と関係ない文字列".to_string()) } } のようにすれば、そのトレイトが期待する動作に反した型は作れるわけで 引数や戻り値のシグニチャの同一性だけに注目するならtraitに違反することはできないけど、それなら継承やインタフェースでも同じで、「LSPに違反してはならない」という原則はそもそも意味がない (常に違反できないから) ってことになるし http://mevius.5ch.net/test/read.cgi/tech/1716759686/830
832: デフォルトの名無しさん [] 2024/07/13(土) 15:50:29.46 ID:mV5TIlCk >>831 例えば fn test_clone(x: impl Clone + PartialEq) { assert!(x.clone(), x); } はClone および PartialEq トレイトの振る舞いに依存したコードだけど、この振る舞いに反した型は作れるよね トレイトは事後要件 (x.clone() == x) を定義できないし、そもそも Clone はそれを担保していないと主張することはできるけど、それならLPSって何のためにあるんだ?ってなるし http://mevius.5ch.net/test/read.cgi/tech/1716759686/832
834: デフォルトの名無しさん [] 2024/07/13(土) 15:55:51.56 ID:mV5TIlCk 訂正 >>832 のアサート行は assert!(x.clone(), x) でなく assert!(x.clone() == x) http://mevius.5ch.net/test/read.cgi/tech/1716759686/834
838: デフォルトの名無しさん [] 2024/07/13(土) 17:43:27.19 ID:mV5TIlCk >>831 意味でなく形式に拘るなら「事後要件を弱めてはいけない」などのルールは、要件がプログラム等の形式で表現されない限りLSPの評価の土台にすら上がらないってことにならない? Cloneトレイトは公式のドキュメントに // Required method fn clone(&self) -> Self; Returns a copy of the value. とあって、exampleでは実際に assert_eq を使って説明しているので、この説明を元にCloneトレイトを実装する型の妥当性を判断して良いように思う これでもまだ「それは意味論上のものでしかない」というなら、逆にそれをクリアしてクラス間の振る舞いを示している現実的な例を教えてくれ http://mevius.5ch.net/test/read.cgi/tech/1716759686/838
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.041s