公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
Web上の実行環境
https://play.rust-lang.org
日本語の情報
https://rust-jp.rs/
※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/
※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust
※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/
※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
※次スレは原則>>980が立てること
前スレ
Rust part13
https://mevius.5ch.net/test/read.cgi/tech/1636247099/
Rust part14
レス数が950を超えています。1000を超えると書き込みができなくなります。
2022/02/12(土) 01:24:16.59ID:XYE+Rws6
853デフォルトの名無しさん
2022/05/08(日) 02:15:49.76ID:0+ernfNx スレの最初から見たけど全てのコードがインデントされてるな
1名だけインデントしていないとか言い出す人は何らかの精神病なんだろうけど
1名だけインデントしていないとか言い出す人は何らかの精神病なんだろうけど
854デフォルトの名無しさん
2022/05/08(日) 02:52:18.44ID:aBGW8DHe 二度手間だから最初からPlaygroundに貼りませんか?って話なのに
ウンコが何人いるかなんてどうでもいい話ばかり気にするのね
ウンコが何人いるかなんてどうでもいい話ばかり気にするのね
855デフォルトの名無しさん
2022/05/08(日) 03:49:22.98ID:dj1cRgnm 面白そうだから次から直貼りする
856デフォルトの名無しさん
2022/05/08(日) 03:50:49.83ID:zz/v69Kq 頑なにプレグラ使わないのはなんで?
857デフォルトの名無しさん
2022/05/08(日) 04:00:12.11ID:yk1Ip/5C いちいち見に行くの面倒だからここでいいんじゃね
でも使いたい人を責めることはしないよ
でも使いたい人を責めることはしないよ
858デフォルトの名無しさん
2022/05/08(日) 04:53:51.34ID:PeeMdZgO859デフォルトの名無しさん
2022/05/08(日) 07:15:54.25ID:slXg99Fw どこの世界でも同じだが
特定の意見や特定の方針を他人に押し付ける人やイラつく人は嫌われる
特定の意見や特定の方針を他人に押し付ける人やイラつく人は嫌われる
860デフォルトの名無しさん
2022/05/08(日) 07:38:34.92ID:yAkpoBe0 ブラウザにでっち上げた言語を無駄に抱き合わせることは、押し付けじゃないの?
861デフォルトの名無しさん
2022/05/08(日) 07:39:03.28ID:yAkpoBe0 ブラウザごと干し上げられそうだけどねw
862デフォルトの名無しさん
2022/05/08(日) 09:09:22.14ID:DesCjmqL ウンコード直貼りと自演擁護はいつもの複製おじさんだから
適当な所で切り上げないと時間の無駄だよ
適当な所で切り上げないと時間の無駄だよ
863デフォルトの名無しさん
2022/05/08(日) 09:37:03.03ID:Nx2GTU7H864デフォルトの名無しさん
2022/05/08(日) 09:52:04.06ID:1JnUqrf/ うんこ等の汚い単語を使うのはいつものキチガイだから無視するのがよいかと
865デフォルトの名無しさん
2022/05/08(日) 10:27:16.57ID:AkhbKZj7866デフォルトの名無しさん
2022/05/08(日) 10:40:24.72ID:VSrRGkQQ せめて技術的な話でやりあってくれめんすw
煽りオンリーは時間の無駄でつよ
煽りオンリーは時間の無駄でつよ
867デフォルトの名無しさん
2022/05/08(日) 11:27:48.48ID:nUQgQyI4 貼られたソースコードはクリック一つで自分の環境やplayground等に移せるようにしている
逆にplayground等に貼られたソースコードは自動引用表示してる
どちらもほぼ同じ表示となるため両派とも自由に好みのスタイルで貼ってくれて構わない
逆にplayground等に貼られたソースコードは自動引用表示してる
どちらもほぼ同じ表示となるため両派とも自由に好みのスタイルで貼ってくれて構わない
868デフォルトの名無しさん
2022/05/08(日) 14:12:20.46ID:Neo9r1Gu インデント付きで表示される5chブラウザが存在するの!?
869デフォルトの名無しさん
2022/05/08(日) 14:46:10.02ID:4M3U681r 最近はjaneでも連続半角スペースが表示されるようになってる
かなり短いコードじゃないと見にくいが
かなり短いコードじゃないと見にくいが
870デフォルトの名無しさん
2022/05/08(日) 15:16:56.45ID:4TKM/7Dc >>868
chmate: https://i.imgur.com/LPDyEpr.jpg
Chrome: https://i.imgur.com/JUzhSQn.jpg
てか、どんなブラウザで見てんのよ
chmate: https://i.imgur.com/LPDyEpr.jpg
Chrome: https://i.imgur.com/JUzhSQn.jpg
てか、どんなブラウザで見てんのよ
871デフォルトの名無しさん
2022/05/08(日) 16:00:44.57ID:IoDfoov/ >>870
ウンコ・オブ・ウンコを撮るあたりはさすがオナニスト
ウンコ・オブ・ウンコを撮るあたりはさすがオナニスト
872デフォルトの名無しさん
2022/05/08(日) 16:41:53.28ID:YFFn3It/ おまえらrustfmt使ったことないのか?
クリックで1つで呼び出せるようにしてるので
インデントが崩れていようが元が変なインデントだろうが綺麗に見やすく表示できてるぞ
他者に文句を言う前に自分で技術で解決しろ
クリックで1つで呼び出せるようにしてるので
インデントが崩れていようが元が変なインデントだろうが綺麗に見やすく表示できてるぞ
他者に文句を言う前に自分で技術で解決しろ
873デフォルトの名無しさん
2022/05/08(日) 16:41:56.65ID:f6r9nZo0 直貼りやインデントは置いといて
コードの中身の技術的な面で何がウンコなのかを書いてくれ
コードの中身の技術的な面で何がウンコなのかを書いてくれ
874デフォルトの名無しさん
2022/05/08(日) 17:33:44.38ID:lkdR6fP8 おっしゃる通り
技術的な議論だけにしていただきたい
表示問題はrustfmt自動適用
技術的な議論だけにしていただきたい
表示問題はrustfmt自動適用
875デフォルトの名無しさん
2022/05/08(日) 17:54:41.31ID:uCxNUubj 自動適用するuserscriptなりextensionなり作ったの?
876デフォルトの名無しさん
2022/05/08(日) 17:55:41.35ID:hxmNE5v6 めんどくせーから5chでシンタックスハイライトとrustfmtとコード実行できるようにしとけ
877デフォルトの名無しさん
2022/05/08(日) 18:08:39.11ID:pEnumwVx 各自の環境に合わせて様々な対応方法があるな
Webブラウザならブラウザ拡張でもいいしブックマークレットでもよい
専ブラは多種あり各々で可不可が違うのでノーコメント
自作ブラウザなら当然楽勝
ところでrustfmtは標準入出力かファイルだが公開ウェブサービスある?
無ければhyperで作ってローカルに動かして使う
Webブラウザならブラウザ拡張でもいいしブックマークレットでもよい
専ブラは多種あり各々で可不可が違うのでノーコメント
自作ブラウザなら当然楽勝
ところでrustfmtは標準入出力かファイルだが公開ウェブサービスある?
無ければhyperで作ってローカルに動かして使う
878デフォルトの名無しさん
2022/05/08(日) 18:16:12.83ID:hxmNE5v6 その次善策としてplaygroundで貼るという手法があります
879デフォルトの名無しさん
2022/05/08(日) 18:25:54.88ID:Qi+3klcX 俺はウェブブラウザで見てるけど間にサーバを挟んでいるのでrustfmtもそこで呼び出すことにする
playgroundからのコード自動引用もやりたいが貼られたURLからrustコードを取ってくるにはどうすればいい??
playgroundからのコード自動引用もやりたいが貼られたURLからrustコードを取ってくるにはどうすればいい??
880デフォルトの名無しさん
2022/05/08(日) 19:52:50.48ID:xEl45JiI881デフォルトの名無しさん
2022/05/08(日) 21:46:56.59ID:CfKZzM4b 「独りよがりの長いコードを繰り返し直貼りするな」
「見る側がフォーマットすればいいだけ」
なんじゃこの流れ
フォーマッタは汚物浄化装置じゃないぞ
「見る側がフォーマットすればいいだけ」
なんじゃこの流れ
フォーマッタは汚物浄化装置じゃないぞ
882デフォルトの名無しさん
2022/05/09(月) 01:40:30.37ID:LU0ROcMI プログラム板でコードが貼られて困る人はいないだろうけど
どうしても欲しい人はコード表示on/offボタンを付ければ良さげ
いずれにせよ各個人の好みの問題は各個人で解決すべき
どうしても欲しい人はコード表示on/offボタンを付ければ良さげ
いずれにせよ各個人の好みの問題は各個人で解決すべき
883デフォルトの名無しさん
2022/05/09(月) 02:58:02.40ID:ffvBu05T オナニーうんコードが問題であって直貼りが問題じゃないんですよ
884デフォルトの名無しさん
2022/05/09(月) 03:29:00.32ID:ffvBu05T 技術面に触れないと突っ込まれそうなので、>>817についての個人的な感想ですが
Tのトレイト境界に関して、数が多くなるのは仕方の無いケースもあるが、この例では単に数が多いだけでなく、
CheckedAdd等の内部実装に踏み込んだトレイトまで指定されていて、その点が良くないと思います
例えばCheckedAddを実装していなくてもFizzBuzzできる型に対して、同じ関数を使うことができない
またCheckedAddを実装しているがより効率の良いアルゴリズムで実装できる型の場合でも、この関数では効率の悪いアルゴリズムで処理するしかない
ので>>822のようにFizzBuzzできるかどうかをtraitとして持たせ、実装詳細は各型に任せるのがよいと思います
こんなことで長文書くのも馬鹿馬鹿しいね
Tのトレイト境界に関して、数が多くなるのは仕方の無いケースもあるが、この例では単に数が多いだけでなく、
CheckedAdd等の内部実装に踏み込んだトレイトまで指定されていて、その点が良くないと思います
例えばCheckedAddを実装していなくてもFizzBuzzできる型に対して、同じ関数を使うことができない
またCheckedAddを実装しているがより効率の良いアルゴリズムで実装できる型の場合でも、この関数では効率の悪いアルゴリズムで処理するしかない
ので>>822のようにFizzBuzzできるかどうかをtraitとして持たせ、実装詳細は各型に任せるのがよいと思います
こんなことで長文書くのも馬鹿馬鹿しいね
885デフォルトの名無しさん
2022/05/09(月) 03:47:02.18ID:sZTgEcAj >>884
その主張は全て間違い
checked addしなければオーバーフローしてプログラムが破綻するだけ
そしてchecked addはCPUレベルではオーバーフローフラグを見てるだけなのでコストゼロ
さらにCheckedAdd traitは任意の型に実装可能
その主張は全て間違い
checked addしなければオーバーフローしてプログラムが破綻するだけ
そしてchecked addはCPUレベルではオーバーフローフラグを見てるだけなのでコストゼロ
さらにCheckedAdd traitは任意の型に実装可能
886デフォルトの名無しさん
2022/05/09(月) 10:52:54.10ID:jFJzwB1n887デフォルトの名無しさん
2022/05/09(月) 11:04:15.31ID:2F1R2wSZ888デフォルトの名無しさん
2022/05/09(月) 11:05:16.81ID:ffvBu05T >>885
Wrapping<T>を使って無限に返すイテレータを返して利用者側でtakeさせる設計でもいいよね
Wrapping<T>を使って無限に返すイテレータを返して利用者側でtakeさせる設計でもいいよね
889デフォルトの名無しさん
2022/05/09(月) 11:09:02.87ID:oo5VwkGP890デフォルトの名無しさん
2022/05/09(月) 11:41:45.48ID:xlOpI0yW Rustにおいてchecked_add (及び同等で返し方が異なるだけのoverflowing_add) は数値を扱う上でオーバーフローを起こさせないための必須の存在
そしてchecked_addは整数型ならばadd直後のCPUのoverflowフラグを見るだけだからオーバーフローを検出するために最もコストが低く済む存在
だからその手のものを素直にコーディングすれば必ず登場
そのtrait CheckedAddを使うのは違和感なく自然に思えるが他にどんな手段があると主張している??
そしてchecked_addは整数型ならばadd直後のCPUのoverflowフラグを見るだけだからオーバーフローを検出するために最もコストが低く済む存在
だからその手のものを素直にコーディングすれば必ず登場
そのtrait CheckedAddを使うのは違和感なく自然に思えるが他にどんな手段があると主張している??
891デフォルトの名無しさん
2022/05/09(月) 12:15:35.42ID:RFFIBNHv 「ゼロからその型の最大値まで一個づつたどるイテレータ」
なんてもんに固執してるあたりがまずさいしょに珍妙
順序や範囲は他の理由で決定させて十分だと思う人は
イテレータとfizzbuzzをきれいに分離して考えてる
なんてもんに固執してるあたりがまずさいしょに珍妙
順序や範囲は他の理由で決定させて十分だと思う人は
イテレータとfizzbuzzをきれいに分離して考えてる
892デフォルトの名無しさん
2022/05/09(月) 12:26:48.80ID:niJ+za4U >>891
その件は最初にFizzBuzzの話が出てきたときに終わっていて単なる例にすぎない
話が分かりにくいならばもっと単純な例としてフィボナッチ数列イテレータでどうかな
ご存知だと思うけど足し算するだけの数列ね
その件は最初にFizzBuzzの話が出てきたときに終わっていて単なる例にすぎない
話が分かりにくいならばもっと単純な例としてフィボナッチ数列イテレータでどうかな
ご存知だと思うけど足し算するだけの数列ね
893デフォルトの名無しさん
2022/05/09(月) 12:37:12.80ID:ffvBu05T894デフォルトの名無しさん
2022/05/09(月) 12:39:13.84ID:naEAx6Bx895デフォルトの名無しさん
2022/05/09(月) 12:41:02.29ID:RFFIBNHv896デフォルトの名無しさん
2022/05/09(月) 12:53:11.04ID:3SVLm32h >>894
経験の違いじゃない?
関心事の分離を意識できないのは使い捨て感覚ででしかコードを書いたことのないからだと思う
組織で開発してたり長く維持する製品コードを書いた経験があればトイプログラムでも関数の責務くらいは意識して書くから
経験の違いじゃない?
関心事の分離を意識できないのは使い捨て感覚ででしかコードを書いたことのないからだと思う
組織で開発してたり長く維持する製品コードを書いた経験があればトイプログラムでも関数の責務くらいは意識して書くから
897デフォルトの名無しさん
2022/05/09(月) 13:06:31.44ID:STAXlYzV フィボナッチ数列イテレータでも同じだろう
fn fibonacci<T>() -> impl Iterator<Item=T>
where T: Clone + TryFrom<usize> + num::CheckedAdd,
{
let [zero, one] = [0, 1].map(|n| T::try_from(n).ok().unwrap());
itertools::unfold((zero, one), |(m, n)|
m.checked_add(&*n).map(|f| {
*m = n.clone();
*n = f.clone();
f
})
)
}
pub fn main() {
for f in fibonacci::<i8>() {
print!("{f} ");
}
println!();
}
fn fibonacci<T>() -> impl Iterator<Item=T>
where T: Clone + TryFrom<usize> + num::CheckedAdd,
{
let [zero, one] = [0, 1].map(|n| T::try_from(n).ok().unwrap());
itertools::unfold((zero, one), |(m, n)|
m.checked_add(&*n).map(|f| {
*m = n.clone();
*n = f.clone();
f
})
)
}
pub fn main() {
for f in fibonacci::<i8>() {
print!("{f} ");
}
println!();
}
898デフォルトの名無しさん
2022/05/09(月) 13:21:30.58ID:De+3ZLPp checked_add否定派のコードも見てみたい
899デフォルトの名無しさん
2022/05/09(月) 13:55:40.18ID:sju3VQR2 フィボナッチとFizzBuzzを同一視する時点でw
900デフォルトの名無しさん
2022/05/09(月) 14:10:19.70ID:MTI9nqyj FizzBuzzの判定処理には Checked は不要
Overflowしないような列挙をするイテレータを実装する Checked が必要
という話だが、 >>817 でこういうイテレータの機能が突然持ち込まれたせいで、みんなが混乱したんやぞ
Overflowしないような列挙をするイテレータを実装する Checked が必要
という話だが、 >>817 でこういうイテレータの機能が突然持ち込まれたせいで、みんなが混乱したんやぞ
901デフォルトの名無しさん
2022/05/09(月) 14:13:22.16ID:MTI9nqyj >Overflowしないような列挙をするイテレータを実装する Checked が必要
「なら」が抜けてた
Overflowしないような列挙をするイテレータを実装するなら Checked が必要
「なら」が抜けてた
Overflowしないような列挙をするイテレータを実装するなら Checked が必要
902デフォルトの名無しさん
2022/05/09(月) 14:16:50.30ID:RuBW4GpF903デフォルトの名無しさん
2022/05/09(月) 15:21:48.58ID:I70tWBjJ FizzBuzzイテレータw
さすが複製おじさんww
さすが複製おじさんww
904デフォルトの名無しさん
2022/05/09(月) 15:30:51.28ID:hb8CmHC4905デフォルトの名無しさん
2022/05/09(月) 15:47:05.40ID:N8sW3Nlf906デフォルトの名無しさん
2022/05/09(月) 15:48:28.09ID:ffvBu05T プリミティブの整数型なら>>824みたいに0..=<T>::MAXでもいいし、
ジェネリックにやりたいなら0..=<T as num::Bounded>::max_value()もある
つーか自分が唯一の正解みたいなこと平気で言うそういうとこやぞ
ジェネリックにやりたいなら0..=<T as num::Bounded>::max_value()もある
つーか自分が唯一の正解みたいなこと平気で言うそういうとこやぞ
907デフォルトの名無しさん
2022/05/09(月) 15:54:04.25ID:RFFIBNHv908デフォルトの名無しさん
2022/05/09(月) 15:58:11.58ID:V0LgyFVt909デフォルトの名無しさん
2022/05/09(月) 16:07:00.72ID:wP4eYPzF 脊髄反射しすぎww
こりゃ真性だな
こりゃ真性だな
910デフォルトの名無しさん
2022/05/09(月) 16:12:12.41ID:oybkhcFw イテレータを返したいならイテレータアダプタとして実装すればいいだけ
FizzBuzzはイテレータのソースにすべきものじゃない
FizzBuzzはイテレータのソースにすべきものじゃない
911デフォルトの名無しさん
2022/05/09(月) 16:30:09.21ID:q8j6bWVf >>906
checked_addの代わりにMAXやmax_valueを使うのは良くないです
checked_addは足し算の時に自動的に発生するオーバーフローを利用するため比較演算が発生しませんが
MAXやmax_valueはその値と比較する演算が余分に発生します
checked_addを使いましょう
checked_addの代わりにMAXやmax_valueを使うのは良くないです
checked_addは足し算の時に自動的に発生するオーバーフローを利用するため比較演算が発生しませんが
MAXやmax_valueはその値と比較する演算が余分に発生します
checked_addを使いましょう
912デフォルトの名無しさん
2022/05/09(月) 17:00:00.27ID:Tvnmu5cO913デフォルトの名無しさん
2022/05/09(月) 17:08:18.20ID:x0QbKG1+ 簡単に差分やマージできる環境と5chスレを比べても無意味じゃないか
914デフォルトの名無しさん
2022/05/09(月) 17:21:09.62ID:gqoBOKwR チーム開発をやっててもオレオレエンジニアっているからね
マウンティング・強弁・逆ギレはメンタリティの問題でもある
「オレが書いたコード、すごいだろ!」
https://xtech.nikkei.com/atcl/nxt/column/18/00205/032300028/
マウンティング・強弁・逆ギレはメンタリティの問題でもある
「オレが書いたコード、すごいだろ!」
https://xtech.nikkei.com/atcl/nxt/column/18/00205/032300028/
915デフォルトの名無しさん
2022/05/09(月) 18:06:15.99ID:i/5F6ceJ >>911
何を言っとるんじゃい
外から渡せばいいじゃんって話をしてるのわかってる?
fizzbuzzは100からのカウントダウンでやったって別にいいんだぞ
traitやenum使う前に関数の入出力考えなよ
何を言っとるんじゃい
外から渡せばいいじゃんって話をしてるのわかってる?
fizzbuzzは100からのカウントダウンでやったって別にいいんだぞ
traitやenum使う前に関数の入出力考えなよ
916デフォルトの名無しさん
2022/05/09(月) 18:09:52.19ID:MTI9nqyj 普通に考えたらこんなイテレータはstd::ops::Rangeとかで十分だし、しかもより高機能だから、自分で実装しなくていいよな
イテレータの勉強をしてるならともかくとして
イテレータの勉強をしてるならともかくとして
917デフォルトの名無しさん
2022/05/09(月) 18:29:52.00ID:V9K9H/9P >>906
その<T as num::Bounded>::max_value()も一つの手であるが意外に致命的な欠陥がある
例えばBigIntなどの最大値がない型に対してBounded traitを実装できない
そして実際にBigIntではimplされていないため使えない
一方で<T as num::CheckedAdd>::checked_add()も同種の問題が起きないのか、だが
例えば最大値が存在しないBigIntでもCheckedAddはimplされている
オーバーフローが発生しないためNoneを返す必要がなく常にSomeを返す形となっている
つまり自分で作った型の場合であってもCheckedAddならば柔軟に対応できる
したがってRustで無限となりうる数列を扱う時はCheckedAddを使用することが好ましい
その<T as num::Bounded>::max_value()も一つの手であるが意外に致命的な欠陥がある
例えばBigIntなどの最大値がない型に対してBounded traitを実装できない
そして実際にBigIntではimplされていないため使えない
一方で<T as num::CheckedAdd>::checked_add()も同種の問題が起きないのか、だが
例えば最大値が存在しないBigIntでもCheckedAddはimplされている
オーバーフローが発生しないためNoneを返す必要がなく常にSomeを返す形となっている
つまり自分で作った型の場合であってもCheckedAddならば柔軟に対応できる
したがってRustで無限となりうる数列を扱う時はCheckedAddを使用することが好ましい
918デフォルトの名無しさん
2022/05/09(月) 18:41:12.79ID:oo5VwkGP impl FizzBuzz for T
vs
impl FizzBuzz for u8, u16, ...
の話だと思ってたんだが話が発散しすぎ
vs
impl FizzBuzz for u8, u16, ...
の話だと思ってたんだが話が発散しすぎ
919デフォルトの名無しさん
2022/05/09(月) 18:50:22.63ID:rGYbsi5m920デフォルトの名無しさん
2022/05/09(月) 18:57:03.49ID:SK/0Snjx >>917
0からの列挙を型だけから導出できないといけない理由は何なのさ
0からの列挙を型だけから導出できないといけない理由は何なのさ
921デフォルトの名無しさん
2022/05/09(月) 19:14:23.35ID:bdsCRHoE >>920
各型には上限値(とその有無)がありメモリサイズとトレードオフだからそこは気を使うよ
Rustではrelease modeだとC/C++と全く同じでオーバーフローしてもpanicは発生せずに数値がラップしうる
例えばi32で2147483647に1を足すと普通の足し算の+つまりadd()だと結果は-2147483648となる
これは数値計算だけでなく単なるカウンター利用に至るまで深刻な結果を招きうる
そのため足し算ならばchecked_add()等を必要に応じて使い分けることになる
各型には上限値(とその有無)がありメモリサイズとトレードオフだからそこは気を使うよ
Rustではrelease modeだとC/C++と全く同じでオーバーフローしてもpanicは発生せずに数値がラップしうる
例えばi32で2147483647に1を足すと普通の足し算の+つまりadd()だと結果は-2147483648となる
これは数値計算だけでなく単なるカウンター利用に至るまで深刻な結果を招きうる
そのため足し算ならばchecked_add()等を必要に応じて使い分けることになる
922デフォルトの名無しさん
2022/05/09(月) 19:36:35.23ID:oo5VwkGP >>919
impl Foo for T where クソ長制約
vs
impl Foo for 具体的な型
という話なら多少興味もってもらえるだろうか
impl Foo for T は基本的に避けるべきだと思う
impl Foo for T where クソ長制約
vs
impl Foo for 具体的な型
という話なら多少興味もってもらえるだろうか
impl Foo for T は基本的に避けるべきだと思う
923デフォルトの名無しさん
2022/05/09(月) 19:43:08.06ID:K1S8Sh/L924デフォルトの名無しさん
2022/05/09(月) 19:44:30.54ID:RFFIBNHv >>918
> impl FizzBuzz for u8, u16, ...
これもう構文として取り込んだらいいのにな
impl_fizzbuzz(u8, u16, ...)
こういうのを書く文化をいっそ言語の構文に格上げして
> impl FizzBuzz for u8, u16, ...
これもう構文として取り込んだらいいのにな
impl_fizzbuzz(u8, u16, ...)
こういうのを書く文化をいっそ言語の構文に格上げして
925デフォルトの名無しさん
2022/05/09(月) 19:48:38.14ID:oo5VwkGP >>923
impl Foo for T where 制約多数って例えばどのtraitの実装?
impl Foo for T where 制約多数って例えばどのtraitの実装?
926デフォルトの名無しさん
2022/05/09(月) 19:48:56.84ID:iweuyBja >>924
そういう型別impl列挙は主に基本的なTraitにおいて行われており
それらを組み合わせてTrait境界とする上位のTraitでは列挙せずfor Tで済むようにRustは上手く設計されている
そういう型別impl列挙は主に基本的なTraitにおいて行われており
それらを組み合わせてTrait境界とする上位のTraitでは列挙せずfor Tで済むようにRustは上手く設計されている
927デフォルトの名無しさん
2022/05/09(月) 19:52:40.17ID:ffvBu05T928デフォルトの名無しさん
2022/05/09(月) 19:58:12.86ID:oo5VwkGP929デフォルトの名無しさん
2022/05/09(月) 20:00:16.74ID:j+WTVljZ930デフォルトの名無しさん
2022/05/09(月) 20:31:38.58ID:RYNyetIG931デフォルトの名無しさん
2022/05/09(月) 20:32:13.36ID:oo5VwkGP932924
2022/05/09(月) 20:43:01.63ID:RFFIBNHv933デフォルトの名無しさん
2022/05/09(月) 20:49:32.72ID:R+ViF9HF >>931
その>>800のコードは特に問題が無いのではないか
強いて言えばその後に出たいくつかの改善案を反映して
impl<T> FizzBuzz for T
where T: Clone + PartialEq + TryFrom<usize> + Rem<Output=T>
{
fn fizzbuzz(&self) -> FizzBuzzResult<&Self> {
let [zero, three, five] = [0, 3, 5]
.map(|n| T::try_from(n).ok().unwrap());
match (self.clone() % three == zero.clone(), self.clone() % five == zero) {
(true, true) => FizzBuzzResult::FizzBuzz,
(true, _) => FizzBuzzResult::Fizz,
(_, true) => FizzBuzzResult::Buzz,
_ => FizzBuzzResult::Num(self),
}
}
}
こんな感じ?
その>>800のコードは特に問題が無いのではないか
強いて言えばその後に出たいくつかの改善案を反映して
impl<T> FizzBuzz for T
where T: Clone + PartialEq + TryFrom<usize> + Rem<Output=T>
{
fn fizzbuzz(&self) -> FizzBuzzResult<&Self> {
let [zero, three, five] = [0, 3, 5]
.map(|n| T::try_from(n).ok().unwrap());
match (self.clone() % three == zero.clone(), self.clone() % five == zero) {
(true, true) => FizzBuzzResult::FizzBuzz,
(true, _) => FizzBuzzResult::Fizz,
(_, true) => FizzBuzzResult::Buzz,
_ => FizzBuzzResult::Num(self),
}
}
}
こんな感じ?
934デフォルトの名無しさん
2022/05/09(月) 21:07:24.73ID:gjyfU0iO935デフォルトの名無しさん
2022/05/09(月) 21:41:03.35ID:uQhYdklw936デフォルトの名無しさん
2022/05/09(月) 21:43:33.82ID:oo5VwkGP937デフォルトの名無しさん
2022/05/09(月) 21:56:18.26ID:ZNGx1nYk >>936
確かにextension traitは有りだな
確かにextension traitは有りだな
938デフォルトの名無しさん
2022/05/09(月) 21:56:24.70ID:ffvBu05T impl<T> _ for T where T: ... 形式のことを blanket implementation って言うんですね
cargo doc で型のページの下の方に出てくるのは知ってたけど、正確な定義は今知った
cargo doc で型のページの下の方に出てくるのは知ってたけど、正確な定義は今知った
939デフォルトの名無しさん
2022/05/09(月) 22:01:11.13ID:jqMNiSw9940デフォルトの名無しさん
2022/05/09(月) 22:24:12.66ID:GKuKBH4Y941デフォルトの名無しさん
2022/05/09(月) 22:53:43.92ID:noDNFQnc942デフォルトの名無しさん
2022/05/09(月) 23:21:10.68ID:ffvBu05T そもそもメソッド増やす必要ありましたか?
仮に方法だけ質問されたとしても、「やめとけ」と答えるのも回答のひとつですよ
仮に方法だけ質問されたとしても、「やめとけ」と答えるのも回答のひとつですよ
943デフォルトの名無しさん
2022/05/09(月) 23:26:29.65ID:IBrSpCMK な、複オジ相手にしても時間の無駄だっただろ?
いい加減学習しようぜ
いい加減学習しようぜ
944デフォルトの名無しさん
2022/05/09(月) 23:40:12.42ID:4G0/iQxJ >>942
メソッドを増やすべき状況は多々あります
既に出ているイテレータメソッド等もその一例です
そして今回のFizzBuzzはあくまでも例ということですからFizzBuzz自体をメソッドにするべきか否かの議論はどうでもよく無意味でしょう
メソッド化を実現できること自体の方が本質にみえます
メソッドを増やすべき状況は多々あります
既に出ているイテレータメソッド等もその一例です
そして今回のFizzBuzzはあくまでも例ということですからFizzBuzz自体をメソッドにするべきか否かの議論はどうでもよく無意味でしょう
メソッド化を実現できること自体の方が本質にみえます
945デフォルトの名無しさん
2022/05/09(月) 23:41:19.52ID:9vSL2/iz946デフォルトの名無しさん
2022/05/09(月) 23:47:14.99ID:21Qt89Lm947デフォルトの名無しさん
2022/05/09(月) 23:52:57.66ID:ffvBu05T948デフォルトの名無しさん
2022/05/10(火) 00:00:07.69ID:3tjOFjrS949デフォルトの名無しさん
2022/05/10(火) 00:04:04.72ID:V9U21P0r950デフォルトの名無しさん
2022/05/10(火) 09:21:54.99ID:9RlKKK9H ひっさつ!おなにーうんこーど!
951デフォルトの名無しさん
2022/05/10(火) 10:42:23.22ID:jQGJqYED 避けるべきというアンチパターンが出来ている時点で欠陥言語、 where T: Fooなどと書けるがRustは決してシンプルじゃない
952デフォルトの名無しさん
2022/05/10(火) 10:47:34.92ID:7R870FiC Rustの目標はシステムプログラミング言語だから、C/C++に比べてマシならおーけー
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 【赤坂ライブハウス刺傷】逃走していた自衛官の男(43)を殺人未遂の疑いで逮捕 警視庁 被害女性とは知人関係 [Ailuropoda melanoleuca★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 中国官製報道「日本経済はもう持たない」にネット民ツッコミ「ニュースだけ見てたら日本はもう百回くらい爆発してる」 [1ゲットロボ★]
- 植田日銀総裁 「円安進行が物価高を起こしている」 ★4 [お断り★]
- 【STARTO ENTERTAINMENT】timelesz、メンバーの不適切言動を謝罪「不用意かつモラルに反した発言であった」 全員の署名入りでコメント [Ailuropoda melanoleuca★]
- 【硬貨】500円だと思ったら「500ウォンが入っていた」価値は約10分の1 全国で飲食店などで“500ウォントラブル”相次いで報告 [ぐれ★]
- 【神奈川新聞】「暇空茜」を県警追送検 [746833765]
- コンビニでラーメンとおにぎり買うとラーメン温めてる間におにぎり食っちゃうよね
- ハムエッグ派VSベーコンエッグ派
- 小泉進次郎防衛相「日本の国防の崇高な使命は愛国心が基盤となっている」ネトウヨ歓喜 [165981677]
- 男子あるある
- 冬眠中のクマの巣穴の出口を何らかの手段で密閉したら
