是否可以将`std :: result :: Result`类型转换为`minhook :: Hook`?

时间:2017-06-26 09:03:11

标签: rust

是否可以使用the minhook libraryscrollview.delegate = self //assign class testClass: UIViewController, UIScrollViewDelegate // conform 类型转换为func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width) if pageNumber == 3{ // hide your label here } // do you logic related to last page }

std::result::Result

minhook::Hook返回test = unsafe { minhook::Hook::<fn(f32, *mut UserCmd) -> bool>::create::<fn(f32, *mut UserCmd) -> bool>(hook_createmove, fn_ptrs.addy) } as minhook::Hook<fn(f32, *mut UserCmd) -> bool>;

正如你所看到的,这给了我非标量的演员问题。这有解决方法吗?

1 个答案:

答案 0 :(得分:3)

Result<T, E>是表示Rust中操作成功或失败的标准类型。它的声明大致如下:

enum Result<T, E> {
    Ok(T),
    Err(E),
}

任何可能以相当可恢复的方式失败的函数(例如:尝试打开不存在的文件或读取损坏的JSON文件时发生解析错误)通常会返回Result。另请参阅What's the benefit of using a Result?

您应该尝试重新解释结果对象。铸造是不可能的,你绝对不应该使用嬗变。相反,你应该总是(我的意思是总是)使用适当的方法来处理它们。指出结果处理的几个例子

  • 要断言检索肯定结果(T类型的对象),请使用unwrap()方法。如果结果出错,程序将会发生混乱。当您确定在该特定情况下不会发生错误,或者当您确实希望程序在发生时终止时,通常会使用此方法。

  • 在其他一些情况下,您希望从函数中传播错误。使用? operator

  • 可以最优雅地实现这一目标

Rust编程语言提供了关于Error Handling的综合部分,强烈鼓励Rust开发人员理解这些概念。