2

我见过.into()用过几次就好了frame_system::RawOrigin::Signed(who).into()。据我了解,它进行了一些转换,但into 的文档并没有明确(对我而言)如何知道它正在转换为什么。对于上下文,我感兴趣的一个特定示例sudo_as()来自sudo 模块。

        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));
        }
4

1 回答 1

3

您是正确的,into它将根据调用它的上下文返回“正确的”类型。在您提供的示例中,您可以查看dispatch函数的文档并看到它需要一个Origin作为参数。但是,如您所见,该who变量被用于创建RawOrigin类型。因此,该into函数用于将提供的类型 ( RawOrigin) 转换为所需的任何类型 (Origin在本例中为 )。

于 2020-05-10T17:45:55.303 回答