[過去ログ] Rust part24 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
43: デフォルトの名無しさん [sage] 2024/06/03(月) 19:27:13.29 ID:oYPTQzXH(2/3) AAS
だからモダンな WinRT に移行しようね!
208(1): デフォルトの名無しさん [sage] 2024/06/16(日) 13:35:38.29 ID:wnp+0tyF(1) AAS
>>200現状だとここを見ておくのがいいかも
外部リンク[html]:public-docs.ferrocene.dev
ISO 26262の認定通すために書かれたものだからかなりちゃんとしている
259: デフォルトの名無しさん [sage] 2024/06/19(水) 18:29:49.29 ID:sNVXKo+0(1) AAS
擬態初心者
350: デフォルトの名無しさん [sage] 2024/06/25(火) 08:54:41.29 ID:Lgitw8zf(1) AAS
お題スレが機能しなくなってゴミがあふれてきてんのかこれ?
567: デフォルトの名無しさん [sage] 2024/07/02(火) 18:32:06.29 ID:0AnHLV8o(1/2) AAS
>>559559(2): デフォルトの名無しさん [sage] 2024/07/02(火) 10:27:11.96 ID:LnXo4/R2(1/2) AAS
>>538
result.and_then(|val| Ok(f(val)?))
とか
result.and_then(|val| Ok(f(val).unwrap()))
じゃなくて
result.and_then(|val| Ok(f(val)))
で良いのはなぜ?
Rustでそれらは全てmatchになるので置き換えて比較すれば理解は簡単
ちなみにmatchにすると記述が長くなるが同レベルで「?」オペレータ適用できるメリットがある
result.and_then(|val| f(val))
これはこう置き換えられる
match result {
Ok(val) => f(val),
Err(err) => Err(err),
}
result.map(|val| f(val))
これはこう置き換えられる
match result {
Ok(val) => Ok(f(val)),
Err(err) => Err(err),
}
つまり常にこれが成り立つ
>>534534(3): デフォルトの名無しさん [sage] 2024/07/01(月) 12:59:53.25 ID:irzLgX5l(1) AAS
>>525
こう書くとresultがErrの時に返せずここでpanicになってしまう
let val = result.unwrap();
f(val)
そのためpanicしてもいいとか絶対にErrとならない特殊な場合を除けば
unwrapを用いてはダメでmapを使ってこのように書くんだよ
result.map(|val| f(val))
ここで本当に関数fを呼ぶだけならresult.map(f)と簡略化できるけど
f(val)の部分は式やブロックの可能性もあるので簡略化せずに進めるね
これは以下と同等でErr(err)の時に保持してくれている
match result {
Ok(val) => Ok(f(val)),
Err(err) => Err(err),
}
ちなみにf(val)もResultを返すときは
mapの代わりにand_thenがある
result.and_then(|val| f(val))
つまり以下の二つは同等
result.map(|val| f(val))
result.and_then(|val| Ok(f(val)))
この場合はもちろん簡素なmapを用いるべき
> 以下の二つは同等
> result.map(|val| f(val))
> result.and_then(|val| Ok(f(val)))
676(1): デフォルトの名無しさん [sage] 2024/07/09(火) 13:35:41.29 ID:YflJELWV(3/6) AAS
>>675675(1): デフォルトの名無しさん [sage] 2024/07/09(火) 13:20:56.23 ID:aoAam1/W(2/5) AAS
>>674
φ(x) のxはオブジェクトと明記されてるのが見えないのかね
さらにSはTのサブタイプと明記されている
Rustのtrait自体はオブジェクトを持たない
さらにtraitを実装する二つの型同士にサブタイプの関係は生じない
つまり対象外でφが存在しないため事前条件も何もない
>明記されてるのが見えないのかね
>Rustのtrait自体はオブジェクトを持たない
それは「RustのTraitはLSPと関係ない」と言いたいの?
>φが存在しないため事前条件も何もない
事前条件も何も表明できないのは「力不足」そのものですな。
678(1): デフォルトの名無しさん [sage] 2024/07/09(火) 15:17:32.29 ID:l7dFkPpL(1) AAS
>>673673(2): デフォルトの名無しさん [sage] 2024/07/09(火) 12:57:46.02 ID:aoAam1/W(1/5) AAS
>>672
自分でそれを書いておいて理解できていないのかよ
そこに明記されてるようにTもSもオブジェクトを持つ具体型についての話だ
Rustのtraitは具体型ではないため関係ないぞ
そしてtraitを実装する各型の間にはサブタイプの関係はないためそこも対象とならない
そこを理解できずに「RustのTraitは力不足」とデタラメを吹聴するのは恥ずかしい
マジでLSP全然理解してないんやな
LSPは具体型かどうかなんて全く関係ないぞ
680: デフォルトの名無しさん [sage] 2024/07/09(火) 15:28:08.29 ID:aoAam1/W(4/5) AAS
>>678
LSPは具体型のみが対象
抽象型を対象にしようとしても適用するにはそのいずれかの具体型となる
723: デフォルトの名無しさん [] 2024/07/10(水) 13:34:42.29 ID:kPG9kWdt(2/2) AAS
>>721721(3): デフォルトの名無しさん [] 2024/07/10(水) 13:29:52.02 ID:kPG9kWdt(1/2) AAS
>>701
そのやり方がなぜ悪いのか理解できませんので、教えてください。
例えば、C++だと、以下の様にするのも別に悪いやり方ではないような
気がするのですが。
class Number {・・・};
Number add(Number &a, Number &b);
Number mul(Number &a, Number &b);
class Integer : public Number {・・・};
class Rational : public Number {・・・};
改めて見てみると、add()やmul()の戻り値にNumberの実態を返しているのがおかしい気もしますが。
IntegerやRationalにadd()やmul()を仮想関数として定義するのが良いのかもしれません。
そのような点で改良の余地が沢山ありそうです。
778: デフォルトの名無しさん [sage] 2024/07/12(金) 15:35:12.29 ID:4qvv2DeJ(1/4) AAS
何気なく cargo update すると後悔する orz
879: デフォルトの名無しさん [sage] 2024/07/15(月) 22:12:32.29 ID:S6UfnUI4(2/2) AAS
またイテレータの話してる
917: デフォルトの名無しさん [sage] 2024/07/21(日) 12:32:17.29 ID:BMrg5vDt(3/3) AAS
>>915915(1): デフォルトの名無しさん [sage] 2024/07/21(日) 12:21:47.94 ID:QhoywuRk(4/4) AAS
なぜ Vec から HashMap は from が使えないのか?
の問いに GPT は答えてくれない
そこはFromのimplがないからと答えてくれる
coherenceの制約を先回りして答えてくれるかどうかは質問次第
985(3): デフォルトの名無しさん [sage] 2024/07/30(火) 06:04:09.29 ID:RHAjweCG(1) AAS
無駄な移動は消える
cargo asmで生成コードを見ることでそれを確認できる
移動前と移動後のアドレスを表示させて最適化を阻害することで元は別々となる例も確認できる
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.050s