X



Rust part16
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2022/06/27(月) 08:17:03.45ID:gDlfKP6u
公式
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/

※次スレは原則>>980が立てること

前スレ
Rust part15
https://mevius.5ch.net/test/read.cgi/tech/1652347700/
0799デフォルトの名無しさん
垢版 |
2022/09/24(土) 22:29:32.09ID:GMpouZpq
ARM64ほどの絶対的パワーは必要ないので、ARM63で価格が120円くらいのチップになりませんかね?
0800デフォルトの名無しさん
垢版 |
2022/09/25(日) 08:24:33.85ID:j3K9KjV7
Option<NoneZeroUsize>などを使えば
IDやカウンタなどの用途でOption<usize>などを使っていたものを
半分のメモリサイズで済むようになるの?
0802デフォルトの名無しさん
垢版 |
2022/09/25(日) 15:32:52.52ID:F2Viqk5M
Microsoftがやりそうなことだけど、Rustに独自拡張を含めたりとかしてほしくない
0803デフォルトの名無しさん
垢版 |
2022/09/25(日) 17:24:00.83ID:xalR35FT
Linuxはカーネル開発の為に今まさにRustに独自拡張を含ませようとしてるのに
Microsoftはダメなの?
0804デフォルトの名無しさん
垢版 |
2022/09/25(日) 17:34:47.30ID:4B3i10Bx
try_new()とかtry_reserve()とか元々ないのが不思議だったし導入の良いきっかけとなっただけ
0805デフォルトの名無しさん
垢版 |
2022/09/25(日) 17:57:47.12ID:6lgwXJxi
言語自体forkして独自のエコシステムを構築しようとしなければ別に良いのでは
0807デフォルトの名無しさん
垢版 |
2022/09/25(日) 18:14:08.03ID:Td47G6We
Rustに限った話じゃないんだけどそれなりに複雑なロジック(例えばデコーダやパーサ)の実践的なテストの
作り方の解説とかどっかにある?例えばJPEGやPNG、MP3、AVIとかを扱うようなコードを想定
関数単体のテストはともかく、結合した状態で全てのコードを動かそうとすると入力パターンがどんどん増えるし
パディングビットにゴミがあっても問題ないかなどを考慮しだすと更に膨れあがる
さらに歴史が長いフォーマットだと、そもそも仕様をどう定義するのかという点が問題になることもあるし
0809デフォルトの名無しさん
垢版 |
2022/09/25(日) 19:04:38.98ID:rVqFiGXV
>>803
別に独自拡張とか入れてないだろ
コンパイラへの機能追加は全部本体に入れていてnightlyで使える状態だし
Linuxカーネル向けのallocなんかは単にライブラリであって言語自体がforkしてるわけではない
0811デフォルトの名無しさん
垢版 |
2022/09/25(日) 19:59:47.96ID:Rxhh3DJ9
>>810
迷走と凋落、そして黒歴史化。
0812デフォルトの名無しさん
垢版 |
2022/09/25(日) 20:07:26.82ID:58piYD8Z
>>807
メディアのエンコーディングのことはさっぱりしらんけど、一般的には結合テストじゃなくて、単体テストでパターンは網羅すべし
できるんならやればいいけど、結合テストで入力の網羅なんて普通はやらない
0813デフォルトの名無しさん
垢版 |
2022/09/25(日) 20:26:59.51ID:Td47G6We
>>812
条件分岐で関数Aを呼ぶべき所を間違えてA'を呼んでいて出力結果がちょっと変・・・というのをさっきやらかした
関数そのものに問題はないし処理内容がちょっと違うだけなので実行は出来てしまうのがいやらしい
で、テストを作ろうとしたけどどうしようか悩み中
0815デフォルトの名無しさん
垢版 |
2022/09/25(日) 21:09:49.29ID:j1+dHWho
>>807
歴史があり、曖昧さが残るフォーマットの再実装はできればやりたくない仕事だな。
対応する仕様を現代で最低限必要なものを取捨選択して決め打ちで実装しつつ、考慮漏れでクリティカルなものは取り入れていく方式でやるしかないよ。

歴史あるフォーマットの曖昧な対応を追体験する作業は、不毛だからできれば既存実装におまかせすべき。
0816デフォルトの名無しさん
垢版 |
2022/09/25(日) 21:31:04.61ID:Td47G6We
>>814
中間コンポーネントの単体テストって普通どうやるんだろ
後段のコンポーネントを切り離してテストするのか?繋げたままテストするのか?
切り離せるようにするとその部分にバグが入り込む余地が生まれるし

>>815
歴史が長いと仕様上○○であるがこれに準拠しないアプリやデータが少なからず存在するため
△△のような実装がベターだみたいなのが沢山あるからねぇ
そしてこの手の情報はググっても網羅するのが難しい
0818デフォルトの名無しさん
垢版 |
2022/09/25(日) 21:51:47.84ID:PDKGWlWe
>>816
> 中間コンポーネントの単体テストって普通どうやるんだろ
中間の意味がよく分からんけど>>813みたいな話なら関数A、関数A'をモックにしてテストする
たいていのテストツールではモックの呼び出し回数のテストができる
0819デフォルトの名無しさん
垢版 |
2022/09/25(日) 21:53:52.45ID:j1+dHWho
>>816
JavaみたいにDIが発展しているタイプの言語だと中間コンポーネントが呼び出すコンポーネントはモックをインジェクトしてやって、適切なメソッドが呼び出されたかのテストとかよく書くね。

けど、正直Rustを含む他の言語で中間のレイヤだけ独立してテスト書くようなこだわりはあまり見たことも書いたこともないなぁ。
モジュール設計の考え方が変わるからかな?
0820デフォルトの名無しさん
垢版 |
2022/09/25(日) 22:41:02.05ID:Td47G6We
今作っているのだとこんな感じかな?
関数C(データの前処理、処理単位への分割)

関数B(処理全体の制御)→関数A'(処理1-2)

関数A(処理1-1)

>>818,819
その場合モックへ切り替える機構はどうするんだろ
そのためにコードを書き換えていてはミスが入り込む可能性が高くなるし、条件付きコンパイルも同様のリスクがある

てかThe Rustのテストの所を見ても関数の呼び出し状況をテストする方法とかは書いていないんだよな
なんかその辺を良い感じに可視化してくれるツールとかあるんだろうか
0821デフォルトの名無しさん
垢版 |
2022/09/26(月) 00:07:36.94ID:h/WE7ZWH
>>820
すまん rust だと cargo test で単体テストを実施するみたいだけど mook/stub をどうやって使うかはよくわからんかったわ
C++ とかだと googlemook とか使ってテスト用のモッククラスを作って入れ替えるかたちだね
0823デフォルトの名無しさん
垢版 |
2022/09/26(月) 06:28:19.26ID:p/pWEmYs
cargo testで関数テスト、モジュールテスト、モジュール間テストなどあらゆるテストをやっているけどダメなの?
0825デフォルトの名無しさん
垢版 |
2022/09/26(月) 19:21:24.42ID:kI3cAlPQ
モックやスタブは別モジュール化しておいて
mod tests内では本物モジュールをuseする代わりにそれをuseするだけじゃないの?
0827デフォルトの名無しさん
垢版 |
2022/09/26(月) 19:31:51.25ID:i/jndsoD
他の言語でもユーティリティを使わずに、DIやモックを自分でやったことがないんだろうな
説明が面倒だ
0828デフォルトの名無しさん
垢版 |
2022/09/26(月) 19:38:20.09ID:V9yeC/LF
>>827
テスト以外の開発の話でも
フレームワークに依存してやってる人は
単純なこと含めて本質的なことを理解してない人が多く
フレームワークなしでは何も分からず何も出来なくなってしまう例を時々見かける
0829デフォルトの名無しさん
垢版 |
2022/09/26(月) 21:10:39.16ID:qW/k82Qg
cfg使えば良いじゃないって人は#ifまみれで一見しただけじゃ
何がどう動くんだか判らないCのコードを正当化するつもりなのだろうか
Rustは人間が注意すれば問題ないみたいな考えはレガシーで時代遅れだ
という思想の言語だと思っているんだが違うのかな
0834デフォルトの名無しさん
垢版 |
2022/09/27(火) 08:15:53.87ID:SBVoZTui
AMD64のデフォルトのオペランドサイズは32bitなのにusizeが64bitなのは何でなのかな
0837デフォルトの名無しさん
垢版 |
2022/09/27(火) 19:04:38.56ID:ZwmfNOl5
>>831
単体テストで、依存を分離するのは当然のことすぎてみんな説明が億劫になってる
C++だろうがRubyだろうが、モックやスタブを使って、関数同士やクラス同士の依存を切り分けてテストするのは当たり前
そうしないとそもそも単体テストにならないじゃん

わかってる人にしかわからないであろう簡略な説明をすると、テスト用のエントリポイントで、テストに使うモックオブジェクトを指定するだけだよ
そういうことができるようにあらかじめコード設計しておかないといけないがな
考えてなかったならリファクタが必要
0839デフォルトの名無しさん
垢版 |
2022/09/27(火) 19:51:56.44ID:AWnlNGZp
本物と異なり決まった値を返す送信元スタブと
本物と異なりassertだけする送信先モックを
mod testsの中では本物の代わりにuseするだけだよね
入れ替えちゃうからtrait制約で本物も偽物も受け付け対応とかわざわざする必要ないよね
0840デフォルトの名無しさん
垢版 |
2022/09/28(水) 00:44:24.76ID:JQpGo85s
>>839
useしたモックをどうやって注入すんの
関数の引数もstatic変数でも良いけど、テスト対象の実装がモックも本物も選択的に使えるようにするならば、
genericな型を受け付けるような実装にしておかないといけないのでtraitが登場するのでは

それともmod testsの外もcfgで置き換えると言っている?
0841デフォルトの名無しさん
垢版 |
2022/09/28(水) 00:48:00.37ID:JQpGo85s
要は
use imp::Foo;
fn target(foo: Foo) {}
がテスト対象だとして
mod tests {
use mock::Foo;
#[test]
fn test() {
target(Foo::new());
}
}
してもコンパイル通らないよね
targetがimp::Fooもmock::Fooも受け付けるようにするにはtraitが必要では
0844デフォルトの名無しさん
垢版 |
2022/09/29(木) 01:43:05.00ID:xXycU9Ev
u32 を格納する型が必要になり、また、逆に u32 に変換する必要もあるという状況で
せっかくだから u32 に変換可能な型は受け入れようと考えてこんなコードを書きました。
しかしエラーになります。

struct Code(u32);

impl<T: Into<u32>> From<T> for Code {
fn from(x: T) -> Self {
Code(x.into())
}
}

impl From<Code> for u32 {
fn from(Code(x): Code) -> Self {
x
}
}

結果的に自分自身への変換を許すことになってしまうのが既存 (標準ライブラリ)
の定義と衝突しているという理屈は理解しているのですが、
問題を解消するためにこの定義が受け入れる範囲から自分自身 (Code) は除外するように
うまく制約を付ける方法は思いつきません。

そもそもこんなところで勝手に変換するのがよくない作法だとかそういうのは脇に置いて
「自分自身だけ除外するような制約」を上手いこと表現できませんかね?
0848デフォルトの名無しさん
垢版 |
2022/09/30(金) 02:17:04.59ID:Yj/X+hjS
初歩的なことですまんけどさ
メソッド内で↓みたいなのってよく見るけど、こう言うのってself.asdfのまま使用するのに比べてどういった利点があるの?
let asdf = self.asdf;
0851デフォルトの名無しさん
垢版 |
2022/09/30(金) 12:43:57.87ID:NYKsqXq4
書き方は違うけどフィールドそれぞれに対して処理を行う場合に抜け漏れがないことをコンパイラにチェックさせる目的でローカル変数にすることはある

let Foo { foo, bar. baz } = self;
としておくと後続の処理で使わないフィールドがあったときにコンパイラが警告してくれる
構造体に新たにフィールド追加した場合も分割代入の箇所でコンパイルエラーになるので修正必要箇所を洗い出すことができる
0853デフォルトの名無しさん
垢版 |
2022/09/30(金) 14:15:24.65ID:oHn8O8ll
本人は俺ってスゲー、天才やん!
って思ってるんだろうけど後でコード見たらなんでこんなイミフなことしてるんだ?バカじゃねーの
ってなるパターンかと
まあこういう工夫をすること自体は悪くない
0855デフォルトの名無しさん
垢版 |
2022/09/30(金) 14:50:06.85ID:temvUu5a
>>851
俺もそのdestructuring assignment自体は使いまくる
しかし目的が漏れチェックとは違うのでこうだな
let Self { foo, bar, .. } = self;
0857デフォルトの名無しさん
垢版 |
2022/09/30(金) 15:59:33.74ID:XmkFmofe
こうやって自己満足の意味不明なコードが量産されていく
0858デフォルトの名無しさん
垢版 |
2022/09/30(金) 16:19:08.34ID:GH/ZHf2N
全フィールド舐めるのが重要な処理ってシリアライズとかだろうか
そんな小手先のテクニックとかじゃなくてproc_macro組んだ方がいいと思う

シリアライズしたいだけならserde使って#[derive(Serialize)]
これも結局proc_macroだわな
0859デフォルトの名無しさん
垢版 |
2022/09/30(金) 17:36:27.38ID:NYKsqXq4
コマンドライン引数や設定ファイルの定義をclap::Argやserde::Deserializeで宣言的にやって、
それらを処理するところで分割代入してローカル変数にして処理してる
人間が意識的に気をつける必要がある箇所を極力減らしたい気持ちでやっている

好き嫌いあるかも知れないけど趣味プロダクトだしコーディングの意図をコメントに残してるから許せ
0860デフォルトの名無しさん
垢版 |
2022/10/01(土) 02:29:47.97ID:hYwRxeDD
>>844
impl<T: Into<u32>> From<T> for Code {}の定義はFromの反射性と衝突するから間違ってる。
Into<u32>を受け付けたいなら関数のパラメタの型をT: Into<u32> or impl Into<u32>にすればいい。
まあ、実装上の規約として必要なんで内部ではtrait IntoFooはパターンとして使われるけど外に漏らすようなものでもない。
0863デフォルトの名無しさん
垢版 |
2022/10/01(土) 19:20:52.10ID:LqnhFBhC
アドレスを考えれば明白に別物
一方で
let t = (123, "abc");
let (x, y) = &t;
と自動マッチングしてくれて
&t の型は &(i32, &str)
x の型は &i32
y の型は &&str
となる
つまり&(T, U)が(&T, &U)に分割代入される
0865デフォルトの名無しさん
垢版 |
2022/10/03(月) 22:39:32.97ID:zgM1XF6F
amd64ターゲットでアセンブラリストを吐かせてみたらr13が全く使用されていないんだけど
r14、r15よりr13を空けておく理由がなにかあるのかな
0867デフォルトの名無しさん
垢版 |
2022/10/04(火) 00:38:55.95ID:1GTeu6AF
うまく表現できないのですが、cやc++なら部分から始められる(動くものが作ることができる)のですけど、rustはそんな気がしないというか
伝わりにくいかもしれませんけど
0868デフォルトの名無しさん
垢版 |
2022/10/04(火) 00:52:50.22ID:4fgdKnMe
そういう事象をちゃんと論理がとおった表現ができないからrustが使えないんだよきみは!
0869デフォルトの名無しさん
垢版 |
2022/10/04(火) 07:13:44.70ID:vxOZn4OH
作りたいものの設計のイメージがc++でできているならそれをrust化するのは比較的簡単だろうしそれができないならrustの基本的な理解が足りないだけかと
0870デフォルトの名無しさん
垢版 |
2022/10/04(火) 07:32:23.41ID:LLw3rM8F
Rustはデータ構造を最初に設計しないといけないというのはあるな
C++でもちゃんとそういうやり方が出来てるなら素直に移行できるだろうけど
雑にポインタ持ち回ったり実装の都合でアドホックに相互参照入れちゃったりする人には厳しいだろう
0871デフォルトの名無しさん
垢版 |
2022/10/04(火) 08:55:50.45ID:fDq9dWrD
C系は良くも悪くも動いてしまうんよな
そんで知らぬ間に副作用まみれになっている
0873はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/10/04(火) 09:22:15.67ID:P4nmisNi
雑に始めてから整理していくスタイルなら C++ のほうがやりやすいというのは理解できる。
でも雑に始めたら整理する機会などないのが現実。
0874デフォルトの名無しさん
垢版 |
2022/10/04(火) 09:24:31.25ID:BONyu2jp
>>867 ですが、
部分から始められるというのは、部分的な学習からということです
ここまで学習すればここまではできるとか
rustでは最初のプログラムを作るにもたくさんのことを知らなければならないというか
Haskellをかじったことがあり、とても興味深いのですが
わかりにくい独り言に、レスをくださってありがとうございました
0875はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/10/04(火) 09:48:05.73ID:P4nmisNi
>>874
> 部分的な学習から

できない。
部分的に学習して何かができたように見えても必ず間違ったものを書いているのが C++ というもの。
学習を進めていくにつれて間違っていたことに何度も気づくのでうんざりした経験があるだろ?
0876デフォルトの名無しさん
垢版 |
2022/10/04(火) 10:23:23.92ID:5od2FDFX
部分的な学習ってのは
C with classes -> STL -> move
みたいな感じじゃない?
他人のコード読むなら全部必要だけど、独習してる分には最初テンプレートとかなくてもいけるでしょ
0877デフォルトの名無しさん
垢版 |
2022/10/04(火) 12:43:12.54ID:7zYgBA5I
>>875 >>876
横からだけど、「部分的な学習」はもっと手前のところ。初心者でも
空のコード->リテラル->関数呼出->ライブラリ使用->変数定義・使用
あたりで使い方が広がるんだけど、Rustは関数呼出-変数あたりに概念のデカイ塊がある。

このあたりをまとめて覚えないと機能するプログラムを組めないので、学習者には辛い状態が続く。
Rustはc++以上に挫折しやすいと思う。
0878デフォルトの名無しさん
垢版 |
2022/10/04(火) 12:54:59.39ID:zVqHX6VA
借用と実体(所有権)を常に意識しなきなならんからね
Cだと全部ポインタ使うから意識しないんだけどね
0879デフォルトの名無しさん
垢版 |
2022/10/04(火) 13:01:26.34ID:NJ6V6LdV
どんなプログラミング言語でもいいから何か言語を学習済みの人にとって
他の言語を学習するのは部分的に段階的にすることが可能だよ
もちろんRustでも同じで初心者向けの学習本
The Rust Programming Language
https://doc.rust-jp.rs/book-ja/
を順番に少しずつ進めれば部分的に段階的に学習できるよ
0880デフォルトの名無しさん
垢版 |
2022/10/04(火) 13:14:23.44ID:fXb8hG+g
>>877
段階を経ず一気に進める無謀なことをする人だけが挫折するかもしれないが無謀なその人が悪い

>>878
いきなりそこまで進める人は単なる無謀者
まずは他の言語と同じ使い方
・実体のコピー
・参照(=借用)
のみ使っている限り所有権なんて知らなくてよい
参照を戻り値としない限りライフタイムも知る必要ない
まずは部分的な学習をすればいい
その後で所有権とライフタイムを学べばよい
0881はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/10/04(火) 13:25:41.11ID:P4nmisNi
>>877
> 関数呼出-変数あたりに概念のデカイ塊がある

C++ にもある。
あるのに中途半端な状態で間違った使い方が出来てしまうのが問題の根源。
まともに機能していないことに気づかずに
機能するプログラムを作れていると誤解して後になって結局は行き詰る。

>> 878
意識する必要はある。
コンパイラが検証してくれないのだからむしろ C のほうが強く意識する。
0882デフォルトの名無しさん
垢版 |
2022/10/04(火) 13:37:36.16ID:pLeAl7hn
まずは(Copy実装型の)数値演算だけやって変数と関数の使い方を覚えればいいだけじゃん
所有権なんて出て来ないぜ
その後にようやく数値の配列をやってその参照渡しと可変参照渡しを学ぶ
といったように順番にちよっとずつ学習していけば全くの初心者でも躓くことはない
0884デフォルトの名無しさん
垢版 |
2022/10/04(火) 13:49:35.50ID:ez1nu7fa
部分的な学習ができないと主張してるやつは、いきなり無茶なことをしてるバカだけだな。
0885デフォルトの名無しさん
垢版 |
2022/10/04(火) 14:54:07.07ID:zVqHX6VA
>>880
でも標準機能の中でその理解が必要なんだよ
into_iterとかiterとか
その辺は本当にちゃんと理解してないとまともなループする書けない
0886デフォルトの名無しさん
垢版 |
2022/10/04(火) 15:06:46.90ID:ZhUau2yw
言語の学習ではあまりないと思うけど複数のコンポーネントを全て完動させないと到達出来ない領域があるのは確か
レイヤーが下がるとそう言うのも珍しくない
0887デフォルトの名無しさん
垢版 |
2022/10/04(火) 15:37:58.58ID:attOzucb
>>885
それは一気に全てを理解しないといけないと思い込んでるアホ人間だから
初心者のうちはfor文なんてざっくりした理解で十分に学習をどんどん進められる
後にIntoIteratorを理解する段階になってようやくfor文を完全に正解に理解すればよい
0889デフォルトの名無しさん
垢版 |
2022/10/04(火) 16:01:39.35ID:zVqHX6VA
>>887
いやそれは無理があるだろ
所有権と借用の理解は型変換の時にも必須
collectとか使うときにも必須
競プロみたいな数値だけ扱うようなプログラムならかけるけど
0890デフォルトの名無しさん
垢版 |
2022/10/04(火) 16:03:22.02ID:LLFCSjL7
>>886
それは言語の学習と関係ないよね
Rust固有の話でもないね
つまり今回の話と全く関係ないでしょう

ちなみにそういう時はサンプルコードなどをまずは魔法の呪文とブラックボックスとして受け入れましょう
そして一つずつ把握する範囲を広げていけばよいのです
失敗する人は最初から全てを把握しようとする人だけです
0891はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/10/04(火) 16:06:42.76ID:P4nmisNi
>>885
問題点が分かってきた。
「部分的な学習」というのは項目をひとつきちんと理解してから次の項目の学習に移るみたいなスタイルを前提としているんじゃないか?
俺が思ってた学習スタイルは「概念が存在していることは知っている」という程度の全体像から解像度を上げていくような方向性だった。
機能は互いに連携するので「この部分は完璧にわかっているけど他はまだ」なんて状況は有りえんし、そういう学習方法できちんと身につくとは思わない。
(もちろん人によってやりやすいスタイルはあるのだろうけども、個人的にはオススメ出来ない。)

流し読み程度でも入門書を一度読めば (細かい借用規則を覚えていなくても) iter を使うくらいは出来るよ。
そこから何度でも読んで細かい理解を深めていくんだよ。
0892デフォルトの名無しさん
垢版 |
2022/10/04(火) 16:09:22.52ID:Yud6QviI
>>889
キチガイは黙っていろ
どんな世界でもそんなに一気に大きく手を広げて学習しようとして上手くいくわけがない
単純に一つずつやっていくのが正しい
collectなんて後で困らん
そもそもイテレータ使わなきゃcollectは出て来ない
ぶっ飛んだことを書き込んでいることを自覚しろ
0894デフォルトの名無しさん
垢版 |
2022/10/04(火) 16:15:28.56ID:Qrm8xufh
>>889
collectを使わなくてもプログラムを書けるから少しずつ学習していく方法でも支障はないし
collectを一旦は魔術だとみなして仕組みの詳細まで把握せずに利用して進めていく学習方法でも支障はないし
FromIteratorなんてあとから学べば十分ですよ
0895デフォルトの名無しさん
垢版 |
2022/10/04(火) 16:17:47.88ID:zVqHX6VA
いやcollectをここまで安全かつ効率よく実装してる言語はないのにそれを使わないのは論外
0896デフォルトの名無しさん
垢版 |
2022/10/04(火) 16:19:54.90ID:zVqHX6VA
戦国時代に例えるならここに名刀があります
ワタクシは未熟だからこの刀は使いませんと言って
戦に出て殺されるみたいな話
その名刀を最初から使えるように訓練すべき
0898デフォルトの名無しさん
垢版 |
2022/10/04(火) 16:26:15.56ID:Qrm8xufh
>>895
使いたいならば使えばよいだけですよ
初心者がFromIteratorの仕組みまで理解しないとcollectを使っちゃいけないのですか?
この場合の『部分的に学習』とはcollectの機能の一部をまずは表層的にのみ理解して使ってみることです
そしてこの『部分的に学習』は可能です
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況