< 返回版块

关于函数内部的匿名生命周期的问题

Daniel 发表于

题目如下:

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

评论区

123hc 2018-08-10T06:18:23.208197

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

rust-beginner 2018-08-16T07:46:56.345113

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

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

rust-beginner 2018-08-16T07:52:28.977347

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

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

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

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

1 共 3 评论, 共 1 页