我偶然发现了一些奇怪的行为,我还不能理解. 我有以下功能:
pub fn complete(self) {
let last_value: Option<BasicValueEnum<'ctx>> = self.last_value.into_inner();
// self.builder.build_return(last_value.as_ref()); // <- does not work
match last_value {
Some(value) => {
self.builder.build_return(Some(&value)); // <- works
},
None => { self.builder.build_return(None); },
}
self.function.verify(true);
}
其中,self.builder.build_return
具有以下签名:
pub fn build_return(&self, value: Option<&dyn BasicValue<'ctx>>) -> InstructionValue<'ctx>
现在,构建器来自一个图书馆,所以我不知道太多细节,但单从签名来看,这种行为对我来说很奇怪.Option.as_ref()
不应该返回Option<&T>
吗?在我的例子中,它应该与我的Match表达式所做的相同.
我有一种强烈的感觉,我错过了一些概念,而不是我遇到了一些错误.
如果它有帮助,建造者来自墨水井图书馆.