23:04:18 @mizunashi_mana@mstdn.mizunashi.work
icon

ほーん、型上で assert が書けるようになるってこと?

23:03:53 @mizunashi_mana@mstdn.mizunashi.work
2023-07-26 22:59:29 瀬良の投稿 shela@mstdn.maud.io
icon

このアカウントは、notestockで公開設定になっていません。

22:57:16 @mizunashi_mana@mstdn.mizunashi.work
icon

ももいろテクノロジー、人生で一番お世話になってるブログです

19:27:29 @mizunashi_mana@mstdn.mizunashi.work
icon

これが Rust や!(いいえ)

Attach image
19:24:09 @mizunashi_mana@mstdn.mizunashi.work
icon

@elpinal ありがとうございます。ちょうどその方法は試してました。macro 定義の中だと補完が効かないのがちょっと難点ですが、基本これで良さそうです。ありがとうございます!

00:39:37 @mizunashi_mana@mstdn.mizunashi.work
icon

@elpinal なるほど、ありがとうございます。結構使用範囲が長い時は scope 区切ってやったり、関数として括り出せるものは括り出したりしてやってるんですが、わりと f / g / f / g みたいな交互の呼び出しが連続する系だと辛いなあって感じでした

00:29:10 00:29:45 @mizunashi_mana@mstdn.mizunashi.work
icon

@elpinal それはそうなんですが、let y の binding でやりたいことは borrowing ではなく単に borrowing の記述数を減らすための binding というか、記述の alias を作りたいって感じです。

f(&mut x.b, x.a);
g(&mut x, 3);
f(&mut x.b, x.b.c + x.a);

の x.b の部分がちょっと長くて一々コピペで書きたくないという感じなんですよね。投稿の方のコードは例コードで、実際には g は A 全体を mutable に操作する何かって感じなので、g の方を弄るみたいな解決はできないって感じです

00:11:36 @mizunashi_mana@mstdn.mizunashi.work
icon

やっぱりなんも分からん。いつか Rust 分かるようになりたいな〜。今回は諦め

00:10:04 @mizunashi_mana@mstdn.mizunashi.work
icon

borrowing しない場合の書き換えは融通利かしてくれてるってこと?

00:08:30 @mizunashi_mana@mstdn.mizunashi.work
icon

でも、

let y = &mut x.b;
x.a = 1;

は書けるが、

let y = &mut x.b;
(&mut x).a = 1;

は書けないのか。それってどういう原理なんだ (別の疑問が生まれてしまった...)

00:06:07 00:06:42 @mizunashi_mana@mstdn.mizunashi.work
icon

つまり例が良くなかったらしい

struct A { a: usize, b: B }
struct B { c: usize }

fn f(y: &mut B, v: usize) {
y.c = v;
}

fn g(x: &mut A, v: usize) {
x.a = v;
}

let mut x = A { a: 1, b: B { c: 2 } }
let y = &mut x.b;

f(y, x.a);
g(&mut x, 3);
f(y, y.c + x.a);

みたいなんが書きたい

00:02:21 @mizunashi_mana@mstdn.mizunashi.work
icon

読んでもよく分からん

x.a = 1;

(&mut x).a = 1;
が違う意味論を持ってるのか