概要
期待は見出し通り。定数にファイルのパスを代入する際、関数の返り値が一時的な値を参照する値であるから代入できない。その一時的な値を永続的な値にするにはどうすればよいか?
コード
rust
1use std::path::Path; 2use once_cell::sync::Lazy; 3 4static DATA_FILE_PATH: Lazy<&Path> = Lazy::new(|| { 5 home::home_dir().unwrap().join("a_file").as_path() 6});
エラー
cannot return value referencing temporary value returns a value referencing data owned by the current function
試したこと
ライフタイムを明示する
&'static
でライフタイムを明示すればプログラムが走っている間、それは常に有効になる。
調べると上記のような記載を見つけたので明示してみたが、同じ問題が発生する。
コード
rust
1use std::path::Path; 2use once_cell::sync::Lazy; 3 4static DATA_FILE_PATH: Lazy<&'static Path> = Lazy::new(|| { 5 home::home_dir().unwrap().join("a_file").as_path() 6});
エラー
cannot return value referencing temporary value returns a value referencing data owned by the current function
型をLazy<&PathBuf>
にする
Lazy<&Path>
のときと同様のエラーがでた。
コード
rust
1use std::path::PathBuf; 2use once_cell::sync::Lazy; 3 4static DATA_FILE_PATH: Lazy<&PathBuf> = Lazy::new(|| { 5 &home::home_dir().unwrap().join("a_file") 6});
エラー
cannot return reference to temporary value returns a reference to data owned by the current function
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/28 23:37 編集
2021/08/28 23:45
2021/08/29 00:13
2021/08/29 01:45
2021/08/29 05:09