[過去ログ]
Rust part16 (1002レス)
Rust part16 http://mevius.5ch.net/test/read.cgi/tech/1656285423/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
839: デフォルトの名無しさん [sage] 2022/09/27(火) 19:51:56.44 ID:AWnlNGZp 本物と異なり決まった値を返す送信元スタブと 本物と異なりassertだけする送信先モックを mod testsの中では本物の代わりにuseするだけだよね 入れ替えちゃうからtrait制約で本物も偽物も受け付け対応とかわざわざする必要ないよね http://mevius.5ch.net/test/read.cgi/tech/1656285423/839
840: デフォルトの名無しさん [sage] 2022/09/28(水) 00:44:24.76 ID:JQpGo85s >>839 useしたモックをどうやって注入すんの 関数の引数もstatic変数でも良いけど、テスト対象の実装がモックも本物も選択的に使えるようにするならば、 genericな型を受け付けるような実装にしておかないといけないのでtraitが登場するのでは それともmod testsの外もcfgで置き換えると言っている? http://mevius.5ch.net/test/read.cgi/tech/1656285423/840
841: デフォルトの名無しさん [sage] 2022/09/28(水) 00:48:00.37 ID:JQpGo85s 要は use imp::Foo; fn target(foo: Foo) {} がテスト対象だとして mod tests { use mock::Foo; #[test] fn test() { target(Foo::new()); } } してもコンパイル通らないよね targetがimp::Fooもmock::Fooも受け付けるようにするにはtraitが必要では http://mevius.5ch.net/test/read.cgi/tech/1656285423/841
842: デフォルトの名無しさん [sage] 2022/09/28(水) 07:20:15.72 ID:1i04Jlqk traitが無い言語では無理ってこと?? http://mevius.5ch.net/test/read.cgi/tech/1656285423/842
843: デフォルトの名無しさん [sage] 2022/09/28(水) 11:35:17.56 ID:RLf9Yg7w >>842 他の言語は他のやり方でやってるだけだろ http://mevius.5ch.net/test/read.cgi/tech/1656285423/843
844: デフォルトの名無しさん [sage] 2022/09/29(木) 01:43:05.00 ID:xXycU9Ev u32 を格納する型が必要になり、また、逆に u32 に変換する必要もあるという状況で せっかくだから u32 に変換可能な型は受け入れようと考えてこんなコードを書きました。 しかしエラーになります。 struct Code(u32); impl<T: Into<u32>> From<T> for Code { fn from(x: T) -> Self { Code(x.into()) } } impl From<Code> for u32 { fn from(Code(x): Code) -> Self { x } } 結果的に自分自身への変換を許すことになってしまうのが既
存 (標準ライブラリ) の定義と衝突しているという理屈は理解しているのですが、 問題を解消するためにこの定義が受け入れる範囲から自分自身 (Code) は除外するように うまく制約を付ける方法は思いつきません。 そもそもこんなところで勝手に変換するのがよくない作法だとかそういうのは脇に置いて 「自分自身だけ除外するような制約」を上手いこと表現できませんかね? http://mevius.5ch.net/test/read.cgi/tech/1656285423/844
845: デフォルトの名無しさん [sage] 2022/09/29(木) 02:16:48.63 ID:zId7dOnm 無い http://mevius.5ch.net/test/read.cgi/tech/1656285423/845
846: デフォルトの名無しさん [sage] 2022/09/29(木) 02:20:01.39 ID:7xp1eqla そっかー http://mevius.5ch.net/test/read.cgi/tech/1656285423/846
847: デフォルトの名無しさん [sage] 2022/09/29(木) 02:40:21.97 ID:U5dWXlr2 そういうのはIntoCodeみたいな感じで別トレイトにすることが多い気がする https://docs.rs/axum/latest/axum/response/trait.IntoResponse.html http://mevius.5ch.net/test/read.cgi/tech/1656285423/847
848: デフォルトの名無しさん [] 2022/09/30(金) 02:17:04.59 ID:Yj/X+hjS 初歩的なことですまんけどさ メソッド内で↓みたいなのってよく見るけど、こう言うのってself.asdfのまま使用するのに比べてどういった利点があるの? let asdf = self.asdf; http://mevius.5ch.net/test/read.cgi/tech/1656285423/848
849: デフォルトの名無しさん [sage] 2022/09/30(金) 10:23:40.27 ID:1sTGpNyR 名前を短くする目的が99パー http://mevius.5ch.net/test/read.cgi/tech/1656285423/849
850: デフォルトの名無しさん [sage] 2022/09/30(金) 11:00:13.39 ID:tNhbOFxw クロージャーで構造体のフィールドにアクセスすると構造体ごとムーブしちゃうんでそれ対策じゃないかな 2021で対策されたからどんどん減ってくだろうけど https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ebea0bd9611104e7a90eb8dfcb9899c9 http://mevius.5ch.net/test/read.cgi/tech/1656285423/850
851: デフォルトの名無しさん [sage] 2022/09/30(金) 12:43:57.87 ID:NYKsqXq4 書き方は違うけどフィールドそれぞれに対して処理を行う場合に抜け漏れがないことをコンパイラにチェックさせる目的でローカル変数にすることはある let Foo { foo, bar. baz } = self; としておくと後続の処理で使わないフィールドがあったときにコンパイラが警告してくれる 構造体に新たにフィールド追加した場合も分割代入の箇所でコンパイルエラーになるので修正必要箇所を洗い出すことができる http://mevius.5ch.net/test/read.cgi/tech/1656285423/851
852: デフォルトの名無しさん [sage] 2022/09/30(金) 13:52:13.77 ID:yzoXDHK/ >>851 なんかすごくモヤモヤする http://mevius.5ch.net/test/read.cgi/tech/1656285423/852
853: デフォルトの名無しさん [sage] 2022/09/30(金) 14:15:24.65 ID:oHn8O8ll 本人は俺ってスゲー、天才やん! って思ってるんだろうけど後でコード見たらなんでこんなイミフなことしてるんだ?バカじゃねーの ってなるパターンかと まあこういう工夫をすること自体は悪くない http://mevius.5ch.net/test/read.cgi/tech/1656285423/853
854: デフォルトの名無しさん [sage] 2022/09/30(金) 14:42:00.50 ID:M1og6e+j フィールドそれぞれに処理をするシチュエーションがわからない http://mevius.5ch.net/test/read.cgi/tech/1656285423/854
855: デフォルトの名無しさん [sage] 2022/09/30(金) 14:50:06.85 ID:temvUu5a >>851 俺もそのdestructuring assignment自体は使いまくる しかし目的が漏れチェックとは違うのでこうだな let Self { foo, bar, .. } = self; http://mevius.5ch.net/test/read.cgi/tech/1656285423/855
856: デフォルトの名無しさん [sage] 2022/09/30(金) 14:55:47.39 ID:t/wNXSJY >>851 これいいな http://mevius.5ch.net/test/read.cgi/tech/1656285423/856
857: デフォルトの名無しさん [] 2022/09/30(金) 15:59:33.74 ID:XmkFmofe こうやって自己満足の意味不明なコードが量産されていく http://mevius.5ch.net/test/read.cgi/tech/1656285423/857
858: デフォルトの名無しさん [sage] 2022/09/30(金) 16:19:08.34 ID:GH/ZHf2N 全フィールド舐めるのが重要な処理ってシリアライズとかだろうか そんな小手先のテクニックとかじゃなくてproc_macro組んだ方がいいと思う シリアライズしたいだけならserde使って#[derive(Serialize)] これも結局proc_macroだわな http://mevius.5ch.net/test/read.cgi/tech/1656285423/858
859: デフォルトの名無しさん [sage] 2022/09/30(金) 17:36:27.38 ID:NYKsqXq4 コマンドライン引数や設定ファイルの定義をclap::Argやserde::Deserializeで宣言的にやって、 それらを処理するところで分割代入してローカル変数にして処理してる 人間が意識的に気をつける必要がある箇所を極力減らしたい気持ちでやっている 好き嫌いあるかも知れないけど趣味プロダクトだしコーディングの意図をコメントに残してるから許せ http://mevius.5ch.net/test/read.cgi/tech/1656285423/859
860: デフォルトの名無しさん [sage] 2022/10/01(土) 02:29:47.97 ID:hYwRxeDD >>844 impl<T: Into<u32>> From<T> for Code {}の定義はFromの反射性と衝突するから間違ってる。 Into<u32>を受け付けたいなら関数のパラメタの型をT: Into<u32> or impl Into<u32>にすればいい。 まあ、実装上の規約として必要なんで内部ではtrait IntoFooはパターンとして使われるけど外に漏らすようなものでもない。 http://mevius.5ch.net/test/read.cgi/tech/1656285423/860
861: デフォルトの名無しさん [sage] 2022/10/01(土) 02:38:45.63 ID:6voBA5Ft &(T, U)と(&T, &U)って等価ですか? http://mevius.5ch.net/test/read.cgi/tech/1656285423/861
862: デフォルトの名無しさん [sage] 2022/10/01(土) 05:47:36.69 ID:6w1pI6Co 等価ではありません http://mevius.5ch.net/test/read.cgi/tech/1656285423/862
863: デフォルトの名無しさん [] 2022/10/01(土) 19:20:52.10 ID:LqnhFBhC アドレスを考えれば明白に別物 一方で let t = (123, "abc"); let (x, y) = &t; と自動マッチングしてくれて &t の型は &(i32, &str) x の型は &i32 y の型は &&str となる つまり&(T, U)が(&T, &U)に分割代入される http://mevius.5ch.net/test/read.cgi/tech/1656285423/863
864: デフォルトの名無しさん [sage] 2022/10/02(日) 10:11:02.15 ID:vdaryILR test http://mevius.5ch.net/test/read.cgi/tech/1656285423/864
865: デフォルトの名無しさん [sage] 2022/10/03(月) 22:39:32.97 ID:zgM1XF6F amd64ターゲットでアセンブラリストを吐かせてみたらr13が全く使用されていないんだけど r14、r15よりr13を空けておく理由がなにかあるのかな http://mevius.5ch.net/test/read.cgi/tech/1656285423/865
866: デフォルトの名無しさん [sage] 2022/10/03(月) 23:46:41.15 ID:cMmfYMlm >>865 そんな不吉なレジスタなんか使うな! http://mevius.5ch.net/test/read.cgi/tech/1656285423/866
867: デフォルトの名無しさん [] 2022/10/04(火) 00:38:55.95 ID:1GTeu6AF うまく表現できないのですが、cやc++なら部分から始められる(動くものが作ることができる)のですけど、rustはそんな気がしないというか 伝わりにくいかもしれませんけど http://mevius.5ch.net/test/read.cgi/tech/1656285423/867
868: デフォルトの名無しさん [sage] 2022/10/04(火) 00:52:50.22 ID:4fgdKnMe そういう事象をちゃんと論理がとおった表現ができないからrustが使えないんだよきみは! http://mevius.5ch.net/test/read.cgi/tech/1656285423/868
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 134 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.021s