22/05/12 15:48:05.20 mdPskXmt.net
>>978
じゃcharでやってみたら?
1001:デフォルトの名無しさん
22/05/12 15:51:11.85 DUB7tBF0.net
>>980
Rangeはオーバーフローしないよね?
RangeFromでオーバーフローして困るなら上限を指定しないと
スレ立てもヨロ
1002:デフォルトの名無しさん
22/05/12 16:26:15 nCP6t6gv.net
>>982
もっと厳しそうなStringで>>976をやってみた
Zの個数で数を表すZ
#[derive(Debug,Clone)]
struct Z(String);
impl std::fmt::Display for Z {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
impl From<usize> for Z {
fn from(n: usize) -> Self {
Z("Z".repeat(n))
}
}
impl std::ops::Add for Z {
type Output = Self;
fn add(self, rhs: Self) -> Self {
Z(self.0.clone() + &(rhs.0))
}
}
impl num::CheckedAdd for Z {
fn checked_add(&self, rhs: &Self) -> Option<Self> {
Some(Z(self.0.clone() + &(rhs.0)))
}
}
fn main() {
countup(Z::from(1)).for_each(|n| println!("{n}"));
}
ちゃんと動作してZの数が増えて行くんだな
1003:デフォルトの名無しさん
22/05/12 16:52:07 +mjBHcs3.net
>>984
それは独自の型であってStringではないよ
上限までイテレートするのに上限が無い型を実装して何がしたいのかわからないが
countup(Z::from(usize::MAX))とかで確認した?
1004:デフォルトの名無しさん
22/05/12 16:58:46 lxDeZNmy.net
>>985
Rustのorphan ruleを知らないのかよ
独自の型に対してしか既存traitを実装できない規則なのでそこは独自の型で正しい
1005:デフォルトの名無しさん
22/05/12 17:11:29 qNZB+StZ.net
>>986
全くもって間違ってるよ
アプローチが間違ってるから>>976や>>984みたいなものしかできない
1006:デフォルトの名無しさん
22/05/12 17:20:14 MHUEjPJH.net
>>984
“Z”を繰り返したいだけなら
(1..100).map(|n| “Z”.repeat(n))でいいのに
新しい型を作って4つも5つもトレイト実装することに何かメリットあるの?
1007:デフォルトの名無しさん
22/05/12 17:27:09 x3l/UcP6.net
>>988
抽象的な考えが出来ない人なのかな
そういうのはあくまでも例であってZを表示したいわけではないことくらい分かるでしょ
1008:デフォルトの名無しさん
22/05/12 17:46:52.13 yYN31ZGU.net
>>976
上限のある型を作ってトレイト境界を満たしてやるとちゃんと上限で止まるんだな
#[derive(Debug,Clone)]
struct FiveBits(usize);
impl FiveBits {
fn make(n: usize) -> Option<FiveBits> {
(n >> 5 == 0).then(|| FiveBits(n))
}
}
impl TryFrom<usize> for FiveBits {
type Error = &'static str;
fn try_from(n: usize) -> Result<Self, Self::Error> {
FiveBits::make(n).ok_or("overflow")
}
}
impl std::ops::Add for FiveBits {
type Output = Self;
fn add(self, rhs: Self) -> Self {
FiveBits::make(self.0 + rhs.0).unwrap()
}
}
impl num::CheckedAdd for FiveBits {
fn checked_add(&self, rhs: &Self) -> Option<Self> {
FiveBits::make(self.0 + rhs.0)
}
}
impl std::fmt::Display for FiveBits {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
1009:デフォルトの名無しさん
22/05/12 17:51:39.83 9RFeMFB6.net
>>980
Rangeは上限ありだから大丈夫
RangeFromならば>>976みたいなのでいいんじゃない?
1010:デフォルトの名無しさん
22/05/12 17:57:40.16 W5nxdksy.net
>>985
それは君が思い込みで勘違いをしている
>>976のイテレータを見るとchecked_addが使われているため
その型に上限が有れば上限で止まるから君の言うとおり
しかしその型に上限が無ければ(リソースの有る限り)無限に進むことになる
1011:デフォルトの名無しさん
22/05/12 18:12:51.67 evRfTR7c.net
>>789
> fn fizzbuzz(&self) -> FizzBuzzResult<&Self> {
その関数を使わせてもらってイテレータにしようと思ったら
参照を返しているために非Copy型に対して上手くいかなくて手詰まってしまった
1012:デフォルトの名無しさん
22/05/12 18:18:34.21 dV7c/A+s.net
まーた汚部屋になってきたなー
1013:デフォルトの名無しさん
22/05/12 18:28:55.30 cuIcFT6k.net
次スレ スレリンク(tech板)
1014:デフォルトの名無しさん
22/05/13 16:05:11.97 QlGabNLh.net
梅丸
1015:デフォルトの名無しさん
22/05/13 16:05:37.61 B3PTMj0D.net
梅錦
1016:デフォルトの名無しさん
22/05/13 16:06:40.24 iApzi+VJ.net
梅初め
1017:デフォルトの名無しさん
22/05/13 16:07:11.25 cgq/NsH4.net
梅おろし
1018:はちみつ餃子
22/05/13 16:08:29.00 aOoPRZFF.net
>>1000 なら長門は俺の嫁
1019:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 90日 14時間 44分 13秒
1020:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています