[過去ログ] Rust part24 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
493(2): デフォルトの名無しさん [] 2024/06/30(日) 05:54:25.07 ID:WATrci3L(1/4) AAS
>>309309(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);
})
})
})
}
横からすみません。
C#を関数型っぽく書いたら、ここまではなったのでRustだったらどうなるのか聞いても良いでしょうか?
public static void Main(string[] args) { args.ToList().ForEach(f); }
static void f(string fileName)
{
Console.WriteLine(fileName);
File.ReadAllLines(fileName).Select(g).ToList().ForEach(Console.WriteLine);
}
static Func<string,int,string> g = (line,i) => $"{i + 1,2}:{line}";
506(1): デフォルトの名無しさん [] 2024/06/30(日) 16:34:51.56 ID:WATrci3L(2/4) AAS
>>497497(3): デフォルトの名無しさん [sage] 2024/06/30(日) 10:53:06.05 ID:DQMdIUg4(1) AAS
あえて >>493 で頑張ると
外部リンク:paiza.io
fn main() {
let cwln = |s| { println!("{}", s) };
let g = |(i, line): (usize, &str)| { format!("{:>2}:{}", i + 1, line) };
let f = |file_name: String| {
cwln(file_name.clone());
std::fs::read_to_string(file_name).map(|u8b| {
u8b.lines().enumerate().map(g).for_each(cwln)
}).unwrap()
};
std::env::args().skip(1).for_each(f)
}
ありがとうございます。
u8b受け取ってるラムダ式を関数化したらスッキリしそうですね。
>>496Selectもindexを受け取れるんですが値を返さないとダメで、
あえてvoidなメソッドの後にreturn 0を、入れてエラーが出なくなったと思ったら、
遅延評価なのかfor/foreach/ForEachじゃないと中身を実行してくれないんですよ…orz
(結論、Selectはデータ加工専用で入出力には使えない)
508(1): デフォルトの名無しさん [] 2024/06/30(日) 16:59:35.48 ID:WATrci3L(3/4) AAS
質問です。
.map(|(i, line)| line.map(|line| println!("{}: {line}", i + 1)))
↑
line.mapは文字列へのmapで1文字1文字に番号振ってる様に見えますが、違うのでしょうか?
素直に
.map(|(i, line)| println!("{}: {line}", i + 1))
とは出来ないのでしょうか?
511: デフォルトの名無しさん [] 2024/06/30(日) 18:10:42.55 ID:WATrci3L(4/4) AAS
>>509509(1): デフォルトの名無しさん [sage] 2024/06/30(日) 17:13:06.42 ID:MSv8cbxu(2/5) AAS
>>508
そこは手続き型で書くと
let line = line?;
のところ
最初のlineはio::Result<String>型
それをmapして次のlineがString型
なるほど、最初のmapと内側のmapで型が違うのですね。
ありがとうございました。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.033s