我已经看到 .into()
被多次使用,例如 frame_system::RawOrigin::Signed(who).into()
。据我了解,它会进行一些转换,但 docs for into不要说清楚(对我来说)如何知道它正在转换成什么。对于上下文 a specific example我感兴趣的是来自 sudo 模块中的 sudo_as()
。
fn sudo_as(origin, who: <T::Lookup as StaticLookup>::Source, call: Box<<T as Trait>::Call>) {
// This is a public call, so we ensure that the origin is some signed account.
let sender = ensure_signed(origin)?;
ensure!(sender == Self::key(), Error::<T>::RequireSudo);
let who = T::Lookup::lookup(who)?;
let res = match call.dispatch(frame_system::RawOrigin::Signed(who).into()) {
Ok(_) => true,
Err(e) => {
sp_runtime::print(e);
false
}
};
Self::deposit_event(RawEvent::SudoAsDone(res));
}
最佳答案
您是正确的,into
将根据调用它的上下文返回“正确的”类型。在您提供的示例中,您可以查看 the docs for the dispatch
function并看到它需要 Origin
作为参数。但是,如您所见,who
变量用于创建 RawOrigin
。类型。因此,into
函数用于将提供的类型 (RawOrigin
) 转换为所需的任何类型(在本例中为 Origin
)。
关于rust - 在 `.into()` 上调用时 `RawOrigin:Signed(who)` 会做什么?上下文如何影响它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61716047/