[過去ログ] Rust part16 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
848: 2022/09/30(金)02:17 ID:Yj/X+hjS(1) AAS
初歩的なことですまんけどさ
メソッド内で↓みたいなのってよく見るけど、こう言うのってself.asdfのまま使用するのに比べてどういった利点があるの?
let asdf = self.asdf;
849: 2022/09/30(金)10:23 ID:1sTGpNyR(1) AAS
名前を短くする目的が99パー
850: 2022/09/30(金)11:00 ID:tNhbOFxw(1) AAS
クロージャーで構造体のフィールドにアクセスすると構造体ごとムーブしちゃうんでそれ対策じゃないかな
2021で対策されたからどんどん減ってくだろうけど
外部リンク:play.rust-lang.org
851
(3): 2022/09/30(金)12:43 ID:NYKsqXq4(1/2) AAS
書き方は違うけどフィールドそれぞれに対して処理を行う場合に抜け漏れがないことをコンパイラにチェックさせる目的でローカル変数にすることはある

let Foo { foo, bar. baz } = self;
としておくと後続の処理で使わないフィールドがあったときにコンパイラが警告してくれる
構造体に新たにフィールド追加した場合も分割代入の箇所でコンパイルエラーになるので修正必要箇所を洗い出すことができる
852: 2022/09/30(金)13:52 ID:yzoXDHK/(1) AAS
>>851
なんかすごくモヤモヤする
853: 2022/09/30(金)14:15 ID:oHn8O8ll(1) AAS
本人は俺ってスゲー、天才やん!
って思ってるんだろうけど後でコード見たらなんでこんなイミフなことしてるんだ?バカじゃねーの
ってなるパターンかと
まあこういう工夫をすること自体は悪くない
854: 2022/09/30(金)14:42 ID:M1og6e+j(1) AAS
フィールドそれぞれに処理をするシチュエーションがわからない
855: 2022/09/30(金)14:50 ID:temvUu5a(1) AAS
>>851
俺もそのdestructuring assignment自体は使いまくる
しかし目的が漏れチェックとは違うのでこうだな
let Self { foo, bar, .. } = self;
856: 2022/09/30(金)14:55 ID:t/wNXSJY(1) AAS
>>851
これいいな
857: 2022/09/30(金)15:59 ID:XmkFmofe(1) AAS
こうやって自己満足の意味不明なコードが量産されていく
858: 2022/09/30(金)16:19 ID:GH/ZHf2N(1) AAS
全フィールド舐めるのが重要な処理ってシリアライズとかだろうか
そんな小手先のテクニックとかじゃなくてproc_macro組んだ方がいいと思う

シリアライズしたいだけならserde使って#[derive(Serialize)]
これも結局proc_macroだわな
859: 2022/09/30(金)17:36 ID:NYKsqXq4(2/2) AAS
コマンドライン引数や設定ファイルの定義をclap::Argやserde::Deserializeで宣言的にやって、
それらを処理するところで分割代入してローカル変数にして処理してる
人間が意識的に気をつける必要がある箇所を極力減らしたい気持ちでやっている

好き嫌いあるかも知れないけど趣味プロダクトだしコーディングの意図をコメントに残してるから許せ
860: 2022/10/01(土)02:29 ID:hYwRxeDD(1) AAS
>>844
impl<T: Into<u32>> From<T> for Code {}の定義はFromの反射性と衝突するから間違ってる。
Into<u32>を受け付けたいなら関数のパラメタの型をT: Into<u32> or impl Into<u32>にすればいい。
まあ、実装上の規約として必要なんで内部ではtrait IntoFooはパターンとして使われるけど外に漏らすようなものでもない。
861: 2022/10/01(土)02:38 ID:6voBA5Ft(1) AAS
&(T, U)と(&T, &U)って等価ですか?
862: 2022/10/01(土)05:47 ID:6w1pI6Co(1) AAS
等価ではありません
863: 2022/10/01(土)19:20 ID:LqnhFBhC(1) AAS
アドレスを考えれば明白に別物
一方で
let t = (123, "abc");
let (x, y) = &t;
と自動マッチングしてくれて
&t の型は &(i32, &str)
x の型は &i32
y の型は &&str
となる
つまり&(T, U)が(&T, &U)に分割代入される
864: 2022/10/02(日)10:11 ID:vdaryILR(1) AAS
test
865
(1): 2022/10/03(月)22:39 ID:zgM1XF6F(1) AAS
amd64ターゲットでアセンブラリストを吐かせてみたらr13が全く使用されていないんだけど
r14、r15よりr13を空けておく理由がなにかあるのかな
866: 2022/10/03(月)23:46 ID:cMmfYMlm(1) AAS
>>865
そんな不吉なレジスタなんか使うな!
867
(4): 2022/10/04(火)00:38 ID:1GTeu6AF(1) AAS
うまく表現できないのですが、cやc++なら部分から始められる(動くものが作ることができる)のですけど、rustはそんな気がしないというか
伝わりにくいかもしれませんけど
868: 2022/10/04(火)00:52 ID:4fgdKnMe(1) AAS
そういう事象をちゃんと論理がとおった表現ができないからrustが使えないんだよきみは!
869: 2022/10/04(火)07:13 ID:vxOZn4OH(1/2) AAS
作りたいものの設計のイメージがc++でできているならそれをrust化するのは比較的簡単だろうしそれができないならrustの基本的な理解が足りないだけかと
870: 2022/10/04(火)07:32 ID:LLw3rM8F(1) AAS
Rustはデータ構造を最初に設計しないといけないというのはあるな
C++でもちゃんとそういうやり方が出来てるなら素直に移行できるだろうけど
雑にポインタ持ち回ったり実装の都合でアドホックに相互参照入れちゃったりする人には厳しいだろう
871: 2022/10/04(火)08:55 ID:fDq9dWrD(1) AAS
C系は良くも悪くも動いてしまうんよな
そんで知らぬ間に副作用まみれになっている
872: 2022/10/04(火)09:10 ID:9SKodj4D(1) AAS
>>867
慣れの問題も大きいのでは
873: はちみつ餃子 ◆8X2XSCHEME 2022/10/04(火)09:22 ID:P4nmisNi(1/5) AAS
雑に始めてから整理していくスタイルなら C++ のほうがやりやすいというのは理解できる。
でも雑に始めたら整理する機会などないのが現実。
874
(1): 2022/10/04(火)09:24 ID:BONyu2jp(1) AAS
>>867 ですが、
部分から始められるというのは、部分的な学習からということです
ここまで学習すればここまではできるとか
rustでは最初のプログラムを作るにもたくさんのことを知らなければならないというか
Haskellをかじったことがあり、とても興味深いのですが
わかりにくい独り言に、レスをくださってありがとうございました
875
(1): はちみつ餃子 ◆8X2XSCHEME 2022/10/04(火)09:48 ID:P4nmisNi(2/5) AAS
>>874
> 部分的な学習から

できない。
部分的に学習して何かができたように見えても必ず間違ったものを書いているのが C++ というもの。
学習を進めていくにつれて間違っていたことに何度も気づくのでうんざりした経験があるだろ?
876
(2): 2022/10/04(火)10:23 ID:5od2FDFX(1) AAS
部分的な学習ってのは
C with classes -> STL -> move
みたいな感じじゃない?
他人のコード読むなら全部必要だけど、独習してる分には最初テンプレートとかなくてもいけるでしょ
877
(2): 2022/10/04(火)12:43 ID:7zYgBA5I(1/2) AAS
>>875 >>876
横からだけど、「部分的な学習」はもっと手前のところ。初心者でも
空のコード->リテラル->関数呼出->ライブラリ使用->変数定義・使用
あたりで使い方が広がるんだけど、Rustは関数呼出-変数あたりに概念のデカイ塊がある。

このあたりをまとめて覚えないと機能するプログラムを組めないので、学習者には辛い状態が続く。
Rustはc++以上に挫折しやすいと思う。
1-
あと 125 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.028s