小编bra*_*178的帖子

结果类型未在名为`unwrap`的作用域中实现方法

由于某种原因,Rust编译器抱怨Result没有实现unwrap,即使我提供的错误类型确实实现了Debug.下面提供了错误的代码.

use std::fmt::{Display, Debug};
use std::error::Error;

trait MyError: Error + Display + Debug {}
type MyResult<T> = Result<T, MyError>;

trait Foo: Clone {}

trait MyTrait {
    fn my_function<T: Foo>(&self) -> MyResult<T>;

    fn unwrap_function<T: Foo>(&self) -> T {
        self.my_function().unwrap()
    }
}
Run Code Online (Sandbox Code Playgroud)

rust

7
推荐指数
1
解决办法
439
查看次数

如何实现&str的<MyType>

我有一个自定义类型pub struct Foo,我希望能够说字符串可以转换为Foo类型.我正在努力impl<'a> Into<Foo> for &'a str,但我从这个答案中知道我不能这样做.我还有其他选择吗?

对于上下文,我正在尝试做类似的事情

trait Foo {
    type ArgType;
    fn new<I: Into<Self::ArgType>>(arg: I) -> Self;
}

struct MyType;
impl Into<MyType> for str {
    fn into(self) -> MyType { MyType }
}

struct Bar;
impl Foo for Bar {
    type ArgType = MyType;
    fn new<I: Into<MyType>>(arg: I) -> Bar { Bar }
}
Run Code Online (Sandbox Code Playgroud)

rust

6
推荐指数
1
解决办法
542
查看次数

为什么将我的 FRP 实施更改为反应性更强的滞后?

我得到了一个与该库一起使用的蛇版本threepenny-gui,但我不喜欢这样的事实:我显式调用newEventaddStateUpdate手动而不是完全基于事件定义行为,例如:

(updates, addUpdate) <- liftIO newEvent
managerB <- accumB initialManager updates

on UI.tick timer $ \_ -> addUpdate $ \manager -> manager'
Run Code Online (Sandbox Code Playgroud)

相比:

managerB <- accumB initialManager $
  UI.tick timer $> \manager -> manager'
Run Code Online (Sandbox Code Playgroud)

IIUC 第二个是更惯用的 FRP,因为它定义了实际事件的行为,而不是创建代理事件来代理更新。但是当我进行此更改时,它会导致以下两个问题之一:

  1. 如果我managerB首先定义(使用 RecursiveDo 访问timer,其定义如下),则根本不会渲染任何内容
  2. 如果我移动managerB到末尾(使用 RecursiveDo 从 DOM 元素访问managerB),第一次按下箭头键时的初始移动会滞后,并且帧会以不稳定的方式呈现。

难道我做错了什么?我应该用什么惯用的方式来构建这些事件/行为?

代码差异在这里:https ://github.com/brandonchinn178/snake/compare/inline-event-handlers

haskell frp threepenny-gui

5
推荐指数
1
解决办法
80
查看次数

标签 统计

rust ×2

frp ×1

haskell ×1

threepenny-gui ×1