rust - 无法在 Rust 的过程宏函数声明中打印
问题描述
我正在使用 aproc_macro
并想打印一些详细信息以进行调试。该println!
声明不打印任何内容。
这是宏调用:
decl_module! {
/// The module declaration.
pub struct Module<T: Trait> for enum Call where origin: T::Origin {
// A default function for depositing events
fn deposit_event() = default;
/// Allow a user to claim ownership of an unclaimed proof
fn create_claim(origin, proof: Vec<u8>) -> DispatchResult {
// Verify that the incoming transaction is signed and store who the
// caller of this function is.
let sender = ensure_signed(origin)?;
println!("send is: {}", sender);
// Verify that the specified proof has not been claimed yet or error with the message
ensure!(!Proofs::<T>::exists(&proof), "This proof has already been claimed.");
// Call the `system` pallet to get the current block number
let current_block = <system::Module<T>>::block_number();
// Store the proof with the sender and the current block number
Proofs::<T>::insert(&proof, (sender.clone(), current_block));
// Emit an event that the claim was created
Self::deposit_event(RawEvent::ClaimCreated(sender, proof));
Ok(())
}
/// Allow the owner to revoke their claim
fn revoke_claim(origin, proof: Vec<u8>) -> DispatchResult {
// Determine who is calling the function
let sender = ensure_signed(origin)?;
// Verify that the specified proof has been claimed
ensure!(Proofs::<T>::exists(&proof), "This proof has not been stored yet.");
// Get owner of the claim
let (owner, _) = Proofs::<T>::get(&proof);
// Verify that sender of the current call is the claim owner
ensure!(sender == owner, "You must own this claim to revoke it.");
// Remove claim from storage
Proofs::<T>::remove(&proof);
// Emit an event that the claim was erased
Self::deposit_event(RawEvent::ClaimRevoked(sender, proof));
Ok(())
}
}
}
它取自这里。我添加了以下行:
println!("send is: {}", sender);
我正在终端(或任何地方)运行区块链(Polkadot dApp),我看不到输出消息。注意:一切正常,但我无法打印。
解决方案
此宏调用生成包含打印语句的代码。它不运行该代码。在代码运行并调用create_claim
.
如果你想调试你的宏调用,有几个示例宏的工具,但我不知道它们是否也适用于过程宏或者是否有等价物。
推荐阅读
- ruby-on-rails - Elasticsearch(rails)嵌套聚合,如何在映射中聚合深度嵌套的字段
- gradle - Android:为什么看不到子模块中的类?
- node.js - Mongoose findOneAndUpdate 返回自定义对象
- elasticsearch - 从第一个数组元素访问值 - 过滤
- excel - 获取特定时间间隔的值
- excel - 解析站点程序中的运行时错误“-2146697211(800c0005)”
- java - 如何将 ArrayList 转换为 Array
- php - 无法加载动态库 iconv - cpanel
- machine-learning - 对产品评论的无监督情绪分析
- php - 好奇 - 使用通用文件扩展名(例如 .tmp)保存用户上传的图像的优缺点?