标签: closures

语法错误:函数体外的非声明语句

该函数makeEvenGenerator应该返回一个以顺序方式生成偶数的函数:

package main 
import "fmt"
func makeEvenGenerator() func() uint {
    i := uint(0)
    return func() (ret uint) {
        ret = i
        i += 2
        return
    }
}func main() {
    nextEven := makeEvenGenerator()
    fmt.Println(nextEven()) // 0
    fmt.Println(nextEven()) // 2
    fmt.Println(nextEven()) // 4
}  
Run Code Online (Sandbox Code Playgroud)

当我运行它,我得到的错误syntax error: unexpected func, expecting semicolon or newlineNon-declaration statement outside function body.

该代码是从Caleb Doxsey的Go编程简介中逐字记录的.我不确定问题是什么.

closures function go

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

闭包作为Rust中的可选函数参数

是否可以将闭包作为函数中的可选参数?

我需要这样的东西(伪代码):

fn function(x: int, optional expr |int| -> int) -> int
Run Code Online (Sandbox Code Playgroud)

和用法将是这样的:

// just the mandatory argument
n = function(z);
Run Code Online (Sandbox Code Playgroud)

或者可选:

// passed closure would be called inside the function
n = function(z, |x| x * x);
Run Code Online (Sandbox Code Playgroud)

如果它甚至可能,我只是无法掌握正确的语法(会欣赏正确匹配表达式的完整示例).

closures optional-parameters argument-passing optional rust

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

为什么命名的javascript函数会持续存在?

这是对你在john resig的Learning Advanced Javascript应用程序中找到的内容的改编.

var math = {
    fact: function fact(n){
        return n > 0 ? n * fact(n-1): 1;
    },
    fact1: function (n) {
        return n > 0? n * math.fact1(n-1) : 1;
    }
};

console.log(math.fact(5));  // 120
console.log(math.fact1(5)); // 120

var o = {
    x: math.fact,
    y: math.fact1
};

math = {};

console.log(o.x === undefined); // false
console.log(o.y === undefined); // false
console.log(o.x(5));            // 120
console.log(o.y(5));            // Uncaught TypeError: math.fact1 is not a function
Run Code Online (Sandbox Code Playgroud)

人们会期望o.x(5)应该抛出错误,但它会执行.为什么?

javascript closures function function-expression

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

Swift - 关闭中的泛型

我来自.NET世界,所以我对Swift中如何实现泛型有点困惑.我正在尝试执行以下操作:

func request<T: Model>(resultHandler: (model: T?) -> ()) {
        var model: T? = nil

        NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: self.url)!) {
            data, response, error in
                if let json = NSString(data: data, encoding: NSUTF8StringEncoding) {
                    model = T(json: json)

                    resultHandler(model: model)
                }
            }.resume()
    }
Run Code Online (Sandbox Code Playgroud)

并按如下方式使用它:

var store: HttpStore = HttpStore(url: ...)

store.request {
            model in
                println("Task name: \(model.name!)")
        }
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

'T?' 没有名为'name'的成员

我明白了.我没有在我的调用代码中的任何地方解析T到特定类型.在.NET中我会做类似store.request <Task>()...但我不能在Swift中这样做.

有没有办法完成我在这里要做的事情?

generics closures swift

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

Java和Objective-C块中的lambdas有什么区别?

我注意到Java的Lambda表达式似乎等同于Objective-C块.

Java的Lambda表达式是否完全等同于Objective-C的块?如果没有,那么什么使Objective-C块不同?

lambda closures objective-c objective-c-blocks

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

Swift Closures问题

我在从闭包中检索数据时遇到问题.我正在调用函数getWallImages,它应该返回一个数组.我可以从闭包内打印数组的内容,但在它之外,数组是空的.

import Foundation
import Parse

class WallPostQuery {

    var result = [WallPost]()

    func getWallImages() -> [WallPost] { 
        let query = WallPost.query()!

        query.findObjectsInBackgroundWithBlock { objects, error in    
            if error == nil {     
                if let objects = objects as? [WallPost] {
                    self.result = objects
                    //This line will print the three PFObjects I have
                    println(self.result)
                }
            }
        }

        //this line prints [] ...empty array?
        println(result)
        return self.result
    }
}
Run Code Online (Sandbox Code Playgroud)

如何从闭包中获取值?

closures parse-platform swift

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

存储闭包引用其他闭包

我正在尝试建立一个回调系统,其中任何回调都可以通过包含在另一个回调中来修改它在调用它之前或之后的行为.此代码有效:

type Closure = Box<Fn(&i32) -> i32>;

fn foo() {
    let add_closure = |closure: Closure| {
        let bar: Closure = Box::new(move |x| {
            println!("{}", x);
            closure(x)
        });
    };

    add_closure(Box::new(|&x| x + 2));
}

fn main() {
    foo()
}
Run Code Online (Sandbox Code Playgroud)

但是只要我将生命周期边界添加到闭包中,它就不会:

type Closure<'a> = Box<Fn(&'a i32) -> i32>;

fn foo<'a>() {
    let add_closure = |closure: Closure<'a>| {
        let bar: Closure<'a> = Box::new(move |x| {
            println!("{}", x);
            closure(x)
        });
    };

    add_closure(Box::new(|&x| x + 2));
}

fn main() {
    foo()
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

./vec_closure.rs:5:32: 8:11 …
Run Code Online (Sandbox Code Playgroud)

closures rust

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

在循环上使用函数有什么好处?

似乎功能迭代器正在取代JS中for循环的使用。

与for / while循环相比,传递诸如mapreduce比较之类的函数有什么好处?

var numbers = [1, 4, 9];
var doubles = numbers.map(function(num) {
  return num * 2;
});

var doubles = [];
for (i = 0; i < numbers.length; i++) { 
    doubles[i] = numbers[i] * 2;
}
Run Code Online (Sandbox Code Playgroud)

javascript closures loops

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

Groovy:向闭包添加一个方法

我有以下关闭

def closure = {
   println ("closure code")
}
Run Code Online (Sandbox Code Playgroud)

我想为它添加一个方法.但如果我试试

 closure.metaClass.fun = { c->
        c.call();
        println ("extra code");
 }   
Run Code Online (Sandbox Code Playgroud)

我得到一个例外

groovy.lang.MissingPropertyException: No such property: fun for class: org.codehaus.groovy.runtime.metaclass.ClosureMetaClass
Run Code Online (Sandbox Code Playgroud)

读另一个答案,我也盲目地试着打电话

ExpandoMetaClass.enableGlobally()
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

有没有办法实现我想要的东西?

groovy closures metaprogramming

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

使用map函数检查RDD元素是否在另一个元素中

我是Spark的新手,对封口感到疑惑.
我有两个RDD,一个包含ID和值列表,另一个包含所选ID列表.
使用map,我想增加元素的值,如果另一个RDD包含它的ID,就像这样.

val ids = sc.parallelize(List(1,2,10,5))
val vals = sc.parallelize(List((1, 0), (2, 0), (3,0), (4,0)))
vals.map( v => {
  if(ids.collect().contains(v._1)){
    (v._1, 1)
  } 
 })
Run Code Online (Sandbox Code Playgroud)

然而,工作挂起并永远不会完成.这样做的正确方法是什么,谢谢你的帮助!

closures scala apache-spark

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