[過去ログ]
Rust part24 (1002レス)
Rust part24 http://mevius.5ch.net/test/read.cgi/tech/1716759686/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
953: デフォルトの名無しさん [sage] 2024/07/24(水) 03:57:10.87 ID:yTLgnmif これは典型的なXY問題だから相手にするだけ無駄 質問者は本当に解決したい元の課題Xを素直に話すべき 自分の思い込みで勝手に判断して進めた二次的な課題Yについて質問しているからそれについては相手にしなくていい http://mevius.5ch.net/test/read.cgi/tech/1716759686/953
954: デフォルトの名無しさん [sage] 2024/07/24(水) 04:42:12.08 ID:sCVmnNU/ >>946 imple IntoIterator for (&str, u64, &str, &str, u64) { ... } で出来るかと思ったけど this is not defined in the current crate because tuples are always foreign http://mevius.5ch.net/test/read.cgi/tech/1716759686/954
955: デフォルトの名無しさん [sage] 2024/07/24(水) 05:38:42.31 ID:U0F2g2Py dynやenumにしろと本質的なアドバイスをもらえているのに対応しようとしない人 http://mevius.5ch.net/test/read.cgi/tech/1716759686/955
956: デフォルトの名無しさん [sage] 2024/07/24(水) 07:25:15.81 ID:Py4dd1Kh たしかにXY問題だな 「異なる型が入り乱れてイテレートしたい」←何のために? 「異なる型が入り乱れてタプルがある」←どうやってそれが出来た? http://mevius.5ch.net/test/read.cgi/tech/1716759686/956
957: デフォルトの名無しさん [] 2024/07/24(水) 08:43:52.20 ID:NUYI7xpt ・タプルは型を混合できる ・タプルはイテレートできない ・異なる型でのイテレートがしたいなら、タプルの代わりに Box<dyn Trait> のような動的型かenum (直和型) の配列を使う で良いんじゃない? http://mevius.5ch.net/test/read.cgi/tech/1716759686/957
958: デフォルトの名無しさん [sage] 2024/07/24(水) 08:43:57.79 ID:sCVmnNU/ とりあえず出来ました struct Hoge<'a> { t: (&str, u64, &str, &str, u64) } impl<'a> IntoIterator for Hoge<'a> { type Item = Fuga<'a>; type IntoIter = std::vec::IntoIter<Self::Item>; fn into_iter(self) -> Self::IntoIter { vec![ Fuga::from(self.t.0), Fuga::from(self.t.1), Fuga::from(self.t.2), Fuga::from(self.t.3), Fuga::from(self.t.4), ].into_iter() } } みなさんありがとうございました http://mevius.5ch.net/test/read.cgi/tech/1716759686/958
959: デフォルトの名無しさん [] 2024/07/24(水) 08:50:34.05 ID:NUYI7xpt XY問題だとか言うけど、上のFizzBuzイテレーターなんかはXとYのどちらとも関係ないでしょ 既にあるデータに対してイテレートする方法でなく、FizzBuzを0から生成するだけだから それをしつこく何度も書くあたりが本物 http://mevius.5ch.net/test/read.cgi/tech/1716759686/959
960: デフォルトの名無しさん [sage] 2024/07/24(水) 09:24:46.95 ID:eaHzhPzb >>959 それな http://mevius.5ch.net/test/read.cgi/tech/1716759686/960
961: デフォルトの名無しさん [sage] 2024/07/24(水) 09:30:08.78 ID:+W2StRcH 意味のないFizzBuzzを散々書いておいて答えられなくなったら急に質問者を攻撃する複オジくん草 http://mevius.5ch.net/test/read.cgi/tech/1716759686/961
962: デフォルトの名無しさん [sage] 2024/07/24(水) 12:35:19.94 ID:qFVR7Ywl 必要な個数のタプルを配列に変換するコードでいいんじゃないかな これは長さ自由に機械的にマクロで生成できそう struct Wrapper<A, B, C, D, E>((A, B, C, D, E)); impl<A, B, C, D, E> From<Wrapper<A, B, C, D, E>> for [Tx; 5] where Tx: From<A> + From<B> + From<C> + From<D> + From<E>, { fn from(x: Wrapper<A, B, C, D, E>) -> Self { [Tx::from(x.0.0), Tx::from(x.0.1), Tx::from(x.0.2), Tx::from(x.0.3), Tx::from(x.0.4)] } } impl<A, B, C, D, E> IntoIterator for Wrapper<A, B, C, D, E> where Tx: From<A> + From<B> + From<C> + From<D> + From<E>, { type Item = Tx; type IntoIter = std::array::IntoIter<Self::Item, 5>; fn into_iter(self) -> Self::IntoIter { let x: [Self::Item; 5] = self.into(); x.into_iter() } } http://mevius.5ch.net/test/read.cgi/tech/1716759686/962
963: デフォルトの名無しさん [sage] 2024/07/24(水) 12:36:33.67 ID:qFVR7Ywl あとはタプルに登場する型を列挙して 例えばこんなコードを機械的に自動生成させてしまえばいいね type T1 = &'static str; type T2 = i64; type T3 = f64; enum Tx { T1(T1), T2(T2), T3(T3), } impl From<T1> for Tx { fn from(x: T1) -> Self { Self::T1(x) } } impl From<T2> for Tx { fn from(x: T2) -> Self { Self::T2(x) } } impl From<T3> for Tx { fn from(x: T3) -> Self { Self::T3(x) } } impl std::fmt::Display for Tx { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { match self { Self::T1(x) => write!(f, "{x}"), Self::T2(x) => write!(f, "{x}"), Self::T3(x) => write!(f, "{x}"), } } } http://mevius.5ch.net/test/read.cgi/tech/1716759686/963
964: デフォルトの名無しさん [sage] 2024/07/24(水) 12:38:12.03 ID:qFVR7Ywl そうするとタプルの中の型の順番は任意でよくて タプルをラッパーにかませるだけで利用できるよ fn main() { let tuple = ("abcde", 123, "nop", 0.456, 789); for x in Wrapper(tuple) { println!("{x}"); } for (i, x) in Wrapper((-1, "pi", 3, 3.14159, "END")).into_iter().enumerate() { println!("{i}: {x}"); } } http://mevius.5ch.net/test/read.cgi/tech/1716759686/964
965: デフォルトの名無しさん [sage] 2024/07/24(水) 12:43:52.56 ID:mjGiit/q 効いてる効いてるw http://mevius.5ch.net/test/read.cgi/tech/1716759686/965
966: デフォルトの名無しさん [sage] 2024/07/24(水) 12:49:36.37 ID:TJmYfYAi 「XY問題だから相手にするだけ無駄」と言い放っておいてからの〜〜 http://mevius.5ch.net/test/read.cgi/tech/1716759686/966
967: デフォルトの名無しさん [sage] 2024/07/24(水) 17:04:11.48 ID:1Kw3Uuff もっと建設的な話題はないの? http://mevius.5ch.net/test/read.cgi/tech/1716759686/967
968: デフォルトの名無しさん [sage] 2024/07/24(水) 19:14:00.84 ID:UKniupNy 5chより建設的なコミュニティを列挙し移住を検討するのが目下最も建設的な話題である http://mevius.5ch.net/test/read.cgi/tech/1716759686/968
969: デフォルトの名無しさん [] 2024/07/24(水) 21:00:33.77 ID:bzm5y73f 最近出た便利クレートの話とかすれば良いんじゃね? http://mevius.5ch.net/test/read.cgi/tech/1716759686/969
970: デフォルトの名無しさん [sage] 2024/07/24(水) 22:25:44.31 ID:mF9Tvkg9 ベストな日付処理クレートについて議論しよう http://mevius.5ch.net/test/read.cgi/tech/1716759686/970
971: デフォルトの名無しさん [sage] 2024/07/25(木) 08:45:26.25 ID:q/t9CUhu おすすめクレートの話はしてほしいな~ http://mevius.5ch.net/test/read.cgi/tech/1716759686/971
972: デフォルトの名無しさん [sage] 2024/07/25(木) 10:09:56.78 ID:P+cFrEvf クレートの話をしてくれー、と http://mevius.5ch.net/test/read.cgi/tech/1716759686/972
973: デフォルトの名無しさん [] 2024/07/25(木) 22:41:22.06 ID:zdgCFOr2 クレートではないけれど今日リリースのRust 1.80でLazyCell, LazyLockが安定版に入ったよ グローバルな変数を外部クレート無しで書きやすくなる http://mevius.5ch.net/test/read.cgi/tech/1716759686/973
974: デフォルトの名無しさん [sage] 2024/07/25(木) 22:49:30.69 ID:9YYk7vP+ >>973 それ、OnceCell使ってたコードは全部置き換えた方がいい奴? http://mevius.5ch.net/test/read.cgi/tech/1716759686/974
975: デフォルトの名無しさん [] 2024/07/25(木) 23:18:37.32 ID:zdgCFOr2 >>974 自分はそれを言えるほど詳しくないけど、必ずしも必要ではないと思う 依存クレートを減らせる点で嬉しいし、今から書くコードでは新しいものにして良いと思うけど、今使ってるものをすぐに置き換える必要があるとまでは思わない 特にライブラリを作ってる場合は、rustcを今日リリースされたばかりの最新バージョンに上げないとライブラリをビルドできなくなるということなので、もう少し待った方が良いかもしれない http://mevius.5ch.net/test/read.cgi/tech/1716759686/975
976: デフォルトの名無しさん [sage] 2024/07/26(金) 00:25:09.02 ID:/65SSmn2 OnceLockからLazyLockへ移行すると 変数宣言と初期化関数が離れていた可読性の問題が解決するとともに 例えばget_or_initを一箇所にするために一つ関数を用意したりするなどしていた手間も省けるようになるね そして何よりも最大のメリットはDerefによりアクセスできる利便性 http://mevius.5ch.net/test/read.cgi/tech/1716759686/976
977: デフォルトの名無しさん [sage] 2024/07/26(金) 23:32:15.42 ID:/65SSmn2 とりあえず定番のこのあたりを置き換えた static RE: LazyLock<Regex> = LazyLock::new(|| Regex::new("...").unwrap()); static SE: LazyLock<Selector> = LazyLock::new(|| Selector::parse("...").unwrap()); http://mevius.5ch.net/test/read.cgi/tech/1716759686/977
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 25 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.015s