小编Cod*_*ody的帖子

无法将闭包作为参数传递

我现在正在学习Rust,似乎我不能将闭包指定为函数参数.这就是我所拥有的:

fn foo(a: i32, f: |i32| -> i32) -> i32 {
    f(a)
}

fn main() {
    let bar = foo(5, |x| { x + 1 });
    println!("{}", bar);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

foo.rs:1:19: 1:20 error: expected type, found `|`
foo.rs:1 fn foo(a: i32, f: |i32| -> i32) -> i32 {
Run Code Online (Sandbox Code Playgroud)

好的,所以它不喜欢闭包语法.这有点烦人,因为现在我必须这样写:

fn foo(a: i32, f: Box<Fn(i32) -> i32>) -> i32 {
    f(a)
}

fn main() {
    let bar = foo(5, Box::new(|x| { x + 1 }));
    println!("{}", bar);
}
Run Code Online (Sandbox Code Playgroud)

发生什么了?我在几个不同的地方读过第一个例子是有效的,所以删除了这个"闭包类型参数"语法,或者我只是做错了什么?

closures rust

10
推荐指数
2
解决办法
1568
查看次数

如何根据用户输入的$ viewValue更新来更新ngModel的$ modelValue

说我有以下指令:

myApp.directive('myDirective', function() {
    return {
        restrict: 'A',
        require: 'ngModel',
        scope: {
            ngModel: '='
        },
        link: function(scope, elem, attrs, ngModelCtrl) {
            scope.$watch('ngModel', function() {
                ngModelCtrl.$modelValue = 'foo';
            });
        }
    }
}); 
Run Code Online (Sandbox Code Playgroud)

以下html:

<input ng-model="name" my-directive></input>
Run Code Online (Sandbox Code Playgroud)

基本上,每当用户更改输入时,my-directive理想情况下将内部模型值更改为"foo",同时保持视图值不变.

但是当我$scope.name在相应的控制器中打印出来时,它不记录"foo",它会记录用户输入的内容.

看起来这ngModelCtrl.$modelValue不是控制器正在访问的 - 我是不正确地接近这个问题?

(另外观察ngModel范围感觉确实是错误的,但我不确定是否有任何其他方式.任何建议都会非常感激!)

angularjs angularjs-directive angular-ngmodel

9
推荐指数
1
解决办法
1万
查看次数

大猩猩websocket与cookie身份验证

这是我的设置:我正在使用用户登录构建服务(使用Negroni和Gorilla),在登录时,用户获取会话cookie,服务器使用该cookie来授权受保护的端点.其中一个受保护的端点允许用户/客户端使用服务器打开websocket,如下所示:

app := negroni.New()

r := mux.NewRouter()

r.HandleFunc("/auth/connection", func(rw http.ResponseWriter, req *http.Request) {
    // authorize request using req.Cookie("session_id")

    // create websocket
    conn, err := upgrader.Upgrade(rw, req, nil)
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    // do stuff...
})

app.UseHandler(r)

app.Run(":3000")
Run Code Online (Sandbox Code Playgroud)

但是,req.Cookies()总是空的,这意味着我不能授权任何请求"/auth/connection"- 而且我几乎肯定它不是websocket客户端的问题(如果你很好奇,我正在使用这个Python包测试它:https ://github.com/liris/websocket-client).我是否正确接近websocket的身份验证?

任何帮助/建议将不胜感激!

cookies go websocket gorilla

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

从响应对象获取请求正文

我正在尝试通过响应对象检索请求的正文.

var request = require('request');

request({
    ...
    body: {
        foo: 'bar'
    }
}, function(err, res, body) {
    var reqBody = res.request.body;
});
Run Code Online (Sandbox Code Playgroud)

但是请求体现在是一个缓冲区.如何将其转换回JavaScript对象?

注意:在发出http请求之前,我无法将请求体存储在范围较大的变量中.

buffer httpresponse httprequest node.js

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

使用{{:: photo.src}}进行一次性绑定投掷错误

我正在尝试在Angular中使用一次性绑定.我有以下HTML:

<img ng-src="{{::photo.src}}"/>
Run Code Online (Sandbox Code Playgroud)

页面加载时,Angular会抛出此错误:

Syntax Error: Token ':' not a primary expression at column 1 of the expression [::photo.src] starting at [::photo.src]
Run Code Online (Sandbox Code Playgroud)

我在几个不同的地方读到这可能是由于表达式中的前导空格......但正如你所看到的,我的代码中没有前导空格.如果我确实添加了前导空格,我当然会得到相同的错误(但在第2列).

我正在使用Angular的1.3.10版本,因此我认为包含了一次性绑定.

任何帮助将不胜感激!

编辑:似乎我错了 - 我实际上使用的是版本1.2.24,所以还没有支持一次性绑定.感谢@sss指出这一点.

angularjs

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

使用/ node时将Amazon S3功能转换为promises时出错

我正试图解除AWS S3异步功能,并遇到一个奇怪的错误.鉴于以下代码,

var s3 = new AWS.S3();
var when = require('when');
var nodefn = require('when/node');

var getObjectP = nodefn.lift(s3.getObject);

getObjectP({
    Bucket: 'bucket_name',
    Key: 'key_name'
})
.then(function(data) {
    ...
}, function(err) {
    ...
});
Run Code Online (Sandbox Code Playgroud)

我收到这个错误,

Object #<Object> has no method 'makeRequest'
Run Code Online (Sandbox Code Playgroud)

这是getObject通常的样子(当我使用回调而不是promises时,它工作正常):

s3.getObject({ ... }, function(err, data) {
    ...
});
Run Code Online (Sandbox Code Playgroud)

我在滥用nodefn.lift吗?这看起来很简单.这是所有感兴趣的人的文档.https://github.com/cujojs/when/blob/master/docs/api.md#nodelift

javascript amazon-s3 node.js promise when-js

5
推荐指数
2
解决办法
2694
查看次数

如何将小写名称 JSON 解码到我的结构中?

我开始疯狂地尝试让 Go 解码这个 json 请求正文。这是一个示例请求:

curl -X POST -d "{\"username\":\"foo\", \"password\":\"bar\"}" http://localhost:3000/users
Run Code Online (Sandbox Code Playgroud)

这是我的处理程序:

mux.HandleFunc("/users", func(rw http.ResponseWriter, req *http.Request) {
        var body struct {
            username string
            password string
        }

        // buf := make([]byte, req.ContentLength)
        // req.Body.Read(buf)
        // fmt.Println(string(buf))
        //
        // The above commented out code will correctly print:
        // {"username":"foo", "password":"bar"}

        err := json.NewDecoder(req.Body).Decode(&body)
        if err != nil {
            rw.WriteHeader(http.StatusNotAcceptable)
            return
        }

        fmt.Printf("%+v\n", body)
        // prints -> {username: password:}
})
Run Code Online (Sandbox Code Playgroud)

就像评论所暗示的那样,我可以验证这req.Body确实是正确的 - 但无论出于何种原因,json.NewDecoder(req.Body).Decode(&body)永远不会填写 的字段body

任何帮助将不胜感激!

json http go

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

初始化盒装切片,无需克隆或复制

我正在尝试初始化一个装箱的None值片段,以便基础类型T不需要实现Cloneor Copy。这里有一些理想的解决方案:

fn by_vec<T>() -> Box<[Option<T>]> {
    vec![None; 5].into_boxed_slice()
}

fn by_arr<T>() -> Box<[Option<T>]> {
    Box::new([None; 5])
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,by_vec实施需要T: Cloneby_arr实施也需要T: Copy。我尝试了更多方法:

fn by_vec2<T>() -> Box<[Option<T>]> {
    let v = &mut Vec::with_capacity(5);
    for i in 0..v.len() {
        v[i] = None;
    }
    v.into_boxed_slice() // Doesn't work: cannot move out of borrowed content
}

fn by_iter<T>() -> Box<[Option<T>]> {
     (0..5).map(|_| None).collect::<Vec<Option<T>>>().into_boxed_slice()
}
Run Code Online (Sandbox Code Playgroud)

by_vec2没有通过编译器(我不确定我理解为什么),但是by_iter可以。我担心的性能collect- …

rust

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