< 返回版块

Daniel 发表于 2018-08-10 11:31

题目如下:

https://play.rust-lang.org/?gist=d3eaa1cf5a4b76669ac3149ce595adb9&version=stable&mode=debug&edition=2015

convert_and_display涉及一个在函数内部用到的匿名的生命周期,内部用到的Record<'_>的'_与函数外部无关,调用时或许应该用convert_and_display::<for<'a> Record<'a>>(vector)这样的形式,但目前rust不支持这么做

所以目前只能传一个Vec的引用,有两个解法:

https://play.rust-lang.org/?gist=cfba74e88f13a2214c681a9fa486a7ca&version=stable&mode=debug&edition=2015

https://play.rust-lang.org/?gist=b4f7e73773dd74b07b403486b2154e9d&version=stable&mode=debug&edition=2015

评论区

写评论
rust-beginner 2018-08-16 15:52

也就是说,传进去一个 Record 而不是 Record<'_> ,这样我们可以在 convert_and_display 内部实例化成 Record<'a>

你代码中的 convert_and_display_with_specific_type 能工作大概就是这个原因了。

我猜想在 HKT 实现之前只能用宏。不知道有没有高手拿出一个不用 HKT 的做法……

@rust-beginner 感觉这个问题可能需要使用 HKT 才能解决……? (吐槽一下居然用 &String 而不是 &str。)

rust-beginner 2018-08-16 15:46

感觉这个问题可能需要使用 HKT 才能解决……?

(吐槽一下居然用 &String 而不是 &str。)

123hc 2018-08-10 14:18

为什么需要
convert_and_display::<for<'a> Record<'a>>(vector)这样的形式的函数, ,又没有返回值,移动vector到函数里(vector生命周期在函数作用域内),record引用vector的值,出了函数vector里面的内容被销毁,不可访问,所以应该借用(vector生命周期在函数作用域外)

123hc 2018-08-10 12:50

'''rust #[derive(Debug)] struct Record<'a> { data: &'a str, }

impl<'a> From<&'a String> for Record<'a> { fn from(data: &'a String) -> Record<'a> { Record { data } } }

fn convert_and_display<'a>(data:&'a String){ let record = Record::from(data); println!("{:?}", record);

}

fn main() { convert_and_display(&"test".into()); }

'''

1 共 4 条评论, 1 页