rust-based-os-comp2022
rust-based-os-comp2022 copied to clipboard
生命周期HRTB相关的问题
生命周期中的HRTB,概括地说,应该用于哪些场景呢? 我知道在如下的场景中:
fn foo<'a,T>(f: T)
where
T: Fn(&'a i32) -> &'a i32,
{
let x = 0;
f(&x); //error: `x` does not live long enough
}
应该使用HRTB:
fn foo<T>(f: T)
where
for<'a> T: Fn(&'a i32) -> &'a i32,
{
let x = 0;
f(&x);
}
但似乎省略该生命周期标注,也能有相同的效果:
fn foo<T>(f: T)
where
T: Fn(&i32) -> &i32,
{
let x = 0;
f(&x);
}
所以使用HRTB的意义是什么呢?还是说,当省略闭包的生命周期参数时,隐式使用了HRTB来推导?求解惑
我是学java的,我的理解是HRTB有些像java中的工厂模式吧,比如你有一大堆类型(rust里也许没有类型,但是有struct)例如A、B、C、D处理不同的业务,每种业务都会执行一个名为call()的方法,但是你想使用一个入口来控制所有的类型来执行这些业务,那么你就可以写一个这样的HRTB来执行A、B、C、D的call方法。随着业务的拓展,比如你又有了一个E业务,那么你就不需要重新修改代码了,只需要再E业务中实现call()就可以了,这算是一种程序设计思想,对修改关闭,对拓展开放的程序设计思想。
我是学java的,我的理解是HRTB有些像java中的工厂模式吧,比如你有一大堆类型(rust里也许没有类型,但是有struct)例如A、B、C、D处理不同的业务,每种业务都会执行一个名为call()的方法,但是你想使用一个入口来控制所有的类型来执行这些业务,那么你就可以写一个这样的HRTB来执行A、B、C、D的call方法。随着业务的拓展,比如你又有了一个E业务,那么你就不需要重新修改代码了,只需要再E业务中实现call()就可以了,这算是一种程序设计思想,对修改关闭,对拓展开放的程序设计思想。
描述得不是很准确,希望各位大佬轻喷,如果有啥不对得地方请指出来,我会虚心学习得
我是学java的,我的理解是HRTB有些像java中的工厂模式吧,比如你有一大堆类型(rust里也许没有类型,但是有struct)例如A、B、C、D处理不同的业务,每种业务都会执行一个名为call()的方法,但是你想使用一个入口来控制所有的类型来执行这些业务,那么你就可以写一个这样的HRTB来执行A、B、C、D的call方法。随着业务的拓展,比如你又有了一个E业务,那么你就不需要重新修改代码了,只需要再E业务中实现call()就可以了,这算是一种程序设计思想,对修改关闭,对拓展开放的程序设计思想。
我查了一下工厂模式,感觉跟HRTB不是一个东西😂? 我理解的HRTB只是一种声明生命周期标注的方式,应该不算一个设计模式吧?
我是学java的,我的理解是HRTB有些像java中的工厂模式吧,比如你有一大堆类型(rust里也许没有类型,但是有struct)例如A、B、C、D处理不同的业务,每种业务都会执行一个名为call()的方法,但是你想使用一个入口来控制所有的类型来执行这些业务,那么你就可以写一个这样的HRTB来执行A、B、C、D的call方法。随着业务的拓展,比如你又有了一个E业务,那么你就不需要重新修改代码了,只需要再E业务中实现call()就可以了,这算是一种程序设计思想,对修改关闭,对拓展开放的程序设计思想。
我查了一下工厂模式,感觉跟HRTB不是一个东西😂? 我理解的HRTB只是一种声明生命周期标注的方式,应该不算一个设计模式吧?
我的理解是生命周期是一个东西,HRTB是一个东西,例子里的不同写法只是声明生命周期和不声明生命周期的写法区别,重点应该是HRTB的使用场景,而不是生命周期的声明
我的理解是生命周期是一个东西,HRTB是一个东西,例子里的不同写法只是声明生命周期和不声明生命周期的写法区别,重点应该是HRTB的使用场景,而不是生命周期的声明
还是不太理解,能举个例子吗?
我是学java的,我的理解是HRTB有些像java中的工厂模式吧,比如你有一大堆类型(rust里也许没有类型,但是有struct)例如A、B、C、D处理不同的业务,每种业务都会执行一个名为call()的方法,但是你想使用一个入口来控制所有的类型来执行这些业务,那么你就可以写一个这样的HRTB来执行A、B、C、D的call方法。随着业务的拓展,比如你又有了一个E业务,那么你就不需要重新修改代码了,只需要再E业务中实现call()就可以了,这算是一种程序设计思想,对修改关闭,对拓展开放的程序设计思想。
我查了一下工厂模式,感觉跟HRTB不是一个东西😂? 我理解的HRTB只是一种声明生命周期标注的方式,应该不算一个设计模式吧?
我的理解是生命周期是一个东西,HRTB是一个东西,例子里的不同写法只是声明生命周期和不声明生命周期的写法区别,重点应该是HRTB的使用场景,而不是生命周期的声明
还是不太理解,能举个例子吗? 看一下这个视频吧,我也不是能说得很清楚 https://www.bilibili.com/video/BV1hp4y1k7SV?p=104
看一下这个视频吧,我也不是能说得很清楚 https://www.bilibili.com/video/BV1hp4y1k7SV?p=104
视频里的完全不是HRTB啊,参考这个文章: https://nomicon.purewhite.io/hrtb.html