小编Kai*_*ren的帖子

当Iterator :: map返回Result :: Err时,如何停止迭代并返回错误?

我有一个函数返回一个Result:

fn find(id: &Id) -> Result<Item, ItemError> {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后另一个使用它像这样:

let parent_items: Vec<Item> = parent_ids.iter()
    .map(|id| find(id).unwrap())
    .collect();
Run Code Online (Sandbox Code Playgroud)

如何在任何map迭代中处理失败的情况?

我知道我可以使用flat_map,在这种情况下,错误结果将被忽略:

let parent_items: Vec<Item> = parent_ids.iter()
    .flat_map(|id| find(id).into_iter())
    .collect();
Run Code Online (Sandbox Code Playgroud)

Result迭代器有0或1个项目,具体取决于成功状态,flat_map如果为0则会过滤掉它.

但是,我不想忽略错误,我想改为使整个代码块停止并返回一个新错误(基于映射中出现的错误,或者只是转发现有错误).

如何在Rust中最好地处理这个问题?

rust rust-result

56
推荐指数
3
解决办法
7484
查看次数

如何匹配特质实现者

我有一个由某些结构实现的特征.我想写一个模式匹配,我可以处理每个可能的情况:

trait Base {}

struct Foo {
    x: u32,
}
struct Bar {
    y: u32,
}

impl Base for Foo {}
impl Base for Bar {}

fn test(v: bool) -> Box<Base + 'static> {
    if v {
        Box::new(Foo { x: 5 })
    } else {
        Box::new(Bar { y: 10 })
    }
}

fn main() {
    let f: Box<Base> = test(true);

    match *f {
        Foo { x } => println!("it was Foo: {}!", x),
        Bar { y } => println!("it was …
Run Code Online (Sandbox Code Playgroud)

rust

25
推荐指数
3
解决办法
5782
查看次数

从向量中删除元素

有没有一种简单的方法从一个元素中删除元素Vec<T>

有一个叫做的方法remove(),它需要一个index: usize,但是index_of()我甚至都看不到一种方法.

我正在寻找(希望)简单和O(n)的东西.

rust

18
推荐指数
6
解决办法
2万
查看次数

nginx和代理WebSockets

我正在尝试使用nginx代理WebSocket + HTTP流量.

我读过这个:http://nginx.org/en/docs/http/websocket.html

我的配置看起来像:

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    gzip  on;

    map $http_upgrade $connection_upgrade {
      default upgrade;
      ''      close;
    }

    server {
      listen 80;
      server_name ourapp.com;

      location / {
        proxy_pass http://127.0.0.1:100;
        proxy_http_version 1.1;
        proxy_redirect off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header   Upgrade          $http_upgrade;
        proxy_set_header   Connection       $connection_upgrade;
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

1)连接每分钟关闭一次.

2)我想在同一个端口上运行HTTP和WS.应用程序在本地工作正常,但如果我尝试将HTTP和WS放在同一个端口并设置此nginx代理,我得到这个:

与'ws://ourapp.com/ws'的WebSocket连接失败:意外的响应代码:200

加载应用程序(HTTP)似乎工作正常,但WebSocket连接失败.

http nginx websocket

16
推荐指数
1
解决办法
6323
查看次数

如何实现一个带有生命周期注释的泛型向量的结构?

以下编译正常:

pub struct Reader<'a> {
    position: uint,
    data: &'a [u8]
}
Run Code Online (Sandbox Code Playgroud)

它是一个读者,它将一个类型的矢量(实际上是一个片段)u8作为参考,并指定生命周期.

然而,这并不是我想要的.我希望能够使结构通用,更准确地说,我想表示类型应该是任何东西的切片.我为初学者尝试了这个:

pub struct Reader<'a, T> {
    position: uint,
    data: &'a T
}
Run Code Online (Sandbox Code Playgroud)

它并不表示T是一个切片,但这已经失败了一条消息:

参数类型T可能不够长; 考虑添加显式生命周期绑定T:'a...

好的,我只需要指定生命周期.

但现在我的问题是如何使它成为切片类型的通用并具有生命周期?我尝试了类似的东西Reader<'a, T: 'a Vec>,T: 'a [T]但我不知道我应该如何表示这一点,官方指南似乎没有处理这样的情况.

我只是想通过借用它来构造一个接受任何类型切片的Reader,并提供对数据进行操作的方法(以只读方式).

rust

13
推荐指数
2
解决办法
7347
查看次数

在Dart中发送SMTP电子邮件

我查看了API文档和语言指南,但我没有看到任何关于在Dart中发送电子邮件的信息.我也检查了这个google群组帖子,但Dart标准已经很老了.

这可能吗?我知道我总是可以使用Process类来调用外部程序,但是如果有的话,我更喜欢真正的Dart解决方案.

email dart

11
推荐指数
1
解决办法
2936
查看次数

如何缓冲流事件?

我有一个订阅流的Web组件.

由于Web组件每次显示时都会重新创建,因此我必须清理订阅者并重做它.

现在我将所有订阅者添加到列表中,并在removed()生命周期方法中我正在做:

subscriptions.forEach((sub) => sub.cancel());
Run Code Online (Sandbox Code Playgroud)

现在,问题是:当没有显示Web组件时,没有人监听流.问题是组件在未显示时缺少数据/事件.

我需要的是缓冲.在注册监听器时,需要缓冲事件并立即发送事件.根据文档,缓冲发生直到监听器注册:

控制器将缓冲所有传入事件,直到订户注册.

这样可行,但问题是侦听器会在某些时候删除重新注册,并且看起来这不会触发缓冲.

看起来缓冲只是最初发生,即使所有听众都不在,也不会在以后发生.

所以问题是:在这种听众可能会消失的情况下,如何缓冲?

dart

8
推荐指数
1
解决办法
598
查看次数

Google Dart Forms工作示例

我目前正在尝试使用用户名和电子邮件在Dart中创建一个简单的表单以进行注册.

我找不到一个可以测试的完整工作示例.如果有人可以解释如何将下面的jQuery代码转换为Dart,我认为这将大大澄清事情.

我也见过FormDataDart课程,但没有例子.任何帮助表示赞赏.

$("#submit").click( function() {
     $.post( $("#myForm").attr("action"),
             $("#myForm :input").serializeArray(),
             function(info) {

               $("#responseDiv").empty();
               $("#responseDiv").html(info);
             });

    $("#myForm").submit( function() {
       return false;    
    });
});
Run Code Online (Sandbox Code Playgroud)

jquery dart

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

节点,儿童,附加新元素

鉴于此代码:

Element elem  = new Element.html("<p>This is a paragraph.</p>");

document.body.append(elem);
document.body.children.add(elem);
document.body.nodes.add(elem);
Run Code Online (Sandbox Code Playgroud)

结果都是一样的,当我addbody.childrenbody.nodes.两者有什么区别?哪个更好?

dart

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

为什么我可以调用File :: open(...).read_to_end()?

以下代码有效,我不知道为什么:

File::open(&some_path).read_to_end().unwrap();
Run Code Online (Sandbox Code Playgroud)

看看API文档,我可以看到File::open()返回IoResult没有的文档read_to_end().

是否存在某种语法糖?难道Result<T, Error>不知何故变成Result<U, Error>

文档:http://doc.rust-lang.org/std/io/fs/struct.File.html#method.read_to_end

rust

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

标签 统计

rust ×5

dart ×4

email ×1

http ×1

jquery ×1

nginx ×1

rust-result ×1

websocket ×1