[過去ログ] Rust part24 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
283: デフォルトの名無しさん [sage] 2024/06/20(木) 18:45:58.46 ID:zOlAS9GZ(1) AAS
使い分けのできないバカしかいないのかな?
309(1): デフォルトの名無しさん [sage] 2024/06/22(土) 23:41:03.46 ID:jxx0duBQ(1) AAS
関数型というとfor文使うのではなくこんなイメージ
fn main() {
std::env::args().skip(1).for_each(|file_name| {
println!("{}", file_name);
std::fs::read_to_string(&file_name).map(|lines| {
lines.lines().enumerate().for_each(|(i, line)| {
println!("{:>2}:{}", i + 1, line);
})
})
})
}
342(2): デフォルトの名無しさん [sage] 2024/06/24(月) 23:33:41.46 ID:FIb4AZ4T(1/2) AAS
>>328-329
なんかダサい
外部リンク:paiza.io
pub fn f(x: i32) -> i32 {
(
-2413f64*(x.pow(6) as f64)/120960f64
+739f64*(x.pow(5) as f64)/1260f64
-157991f64*(x.pow(4) as f64)/24192f64
+69551f64*(x.pow(3) as f64)/2016f64
-2691673f64*(x.pow(2) as f64)/30240f64
+88679f64*(x as f64)/840f64
-905f64/21f64
+0.5)
as i32
}
pub fn g(y: i32) -> i32 {
(
13f64*(y.pow(6) as f64)/120960f64
-(y.pow(5) as f64)/315f64
+1415f64*(y.pow(4) as f64)/24192f64
-1511f64*(y.pow(3) as f64)/2016f64
+144793f64*(y.pow(2) as f64)/30240f64
-3053f64*(y as f64)/280f64
+185f64/21f64
+0.5)
as i32
}
pub fn main() {
let a = vec![(1, 2), (2, 1), (3, 3), (4, 10), (6, 4), (8, 8), (10, 6)];
for (x, _y) in &a { println!("{}, {}", x, f(*x)); }
for (_x, y) in &a { println!("{}, {}", y, g(*y)); }
}
358: デフォルトの名無しさん [sage] 2024/06/25(火) 12:43:05.46 ID:qH1sgo3/(1/2) AAS
「Rustを学ぶためにC++を学ぶ必要があるか(学ぶといいか)」も定期的に沸くな
何度も見てて思うのが
「あなたはRustを学ぶ前にC++を学んでいたか」とYes/Noが一致して、平行線にしかならない議論なのでは
461: デフォルトの名無しさん [sage] 2024/06/29(土) 13:38:30.46 ID:xx5BdVU7(1) AAS
ダックタイピングがあるってどういう状態のことだろう
541: デフォルトの名無しさん [sage] 2024/07/01(月) 14:48:54.46 ID:JlB5uk0q(3/3) AAS
and_thenはor_elseに対してのantitheseだと思った
572(1): デフォルトの名無しさん [sage] 2024/07/03(水) 06:25:46.46 ID:uJMJjlOC(1) AAS
>>570tauriはその中に入れるべきじゃないだろ
あれはReact/JSだぞ
677: デフォルトの名無しさん [sage] 2024/07/09(火) 14:43:14.46 ID:Tc+iYmTn(1) AAS
リファクタリングするとき
プログラム(CPU)の動作の副作用は起きないけど
コーディングの変更に対して副作用が大き過ぎるというか広過ぎる
693: デフォルトの名無しさん [sage] 2024/07/09(火) 23:22:06.46 ID:J+Fyw0mO(1) AAS
>>691691(7): デフォルトの名無しさん [] 2024/07/09(火) 22:57:23.83 ID:/lHavWP5(1) AAS
>>685
リスコフの置換原則は設計的な原則だから言語仕様で違反を防ぐことはできないぞ
悪名高い長方形・正方形の問題はトレイトがあっても起こり得る
trait Rectangle {
fn set_width(&mut self, width: i32);
fn set_height(&mut self, height: i32);
fn width(&self) -> i32;
fn height(&self) -> i32;
fn area(&self) -> i32 { self.width() * self.height() }
}
struct Square { len: i32 }
impl Rectangle for Square {
fn set_width(&mut self, width: i32) { self.len = width; }
fn set_height(&mut self, height: i32) { self.len = width; }
fn width(&self) -> i32 { self.len }
fn height(&self) -> i32 { self.len }
}
fn func(x: &mut impl Rectangle) {
x.set_width(3);
x.set_height(4);
// xが長方形であれば以下が成り立つはずだが、Square型を渡された場合に失敗する
assert!(x.area() == 12);
}
トレイトは機能を表します
2つの異なる長さを持つ(受け取る)機能を定義しているのならば
正方形はその実装型にはなりえません
694: デフォルトの名無しさん [] 2024/07/09(火) 23:24:11.46 ID:KAvgjhF7(1/2) AAS
>>692IRectanble トレイトとかに読み替えてくれ
これは設計的に問題のある例を恣意的に示しているので不自然な点はあるけど、意図は伝わると思う
分かる人は分かると思うけど、問題は「そもそも正方形はwidthとheightという2つの値を扱うインタエースを持つべきでない」というところなので、Rectangleトレイトを作った時点で破綻している
けどそれは設計の問題なので、トレイトという仕組みによってコンパイラが防げるものではないということ
698(1): デフォルトの名無しさん [sage] 2024/07/09(火) 23:56:35.46 ID:ZNKPIxXk(3/3) AAS
>Rustのtraitとその実装型はis-aの関係ではなくhas-aの関係を持つ
すげーのが出てきたなこりゃw
832(1): デフォルトの名無しさん [] 2024/07/13(土) 15:50:29.46 ID:mV5TIlCk(6/8) AAS
>>831例えば
fn test_clone(x: impl Clone + PartialEq) {
assert!(x.clone(), x);
}
はClone および PartialEq トレイトの振る舞いに依存したコードだけど、この振る舞いに反した型は作れるよね
トレイトは事後要件 (x.clone() == x) を定義できないし、そもそも Clone はそれを担保していないと主張することはできるけど、それならLPSって何のためにあるんだ?ってなるし
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.046s