Silentdoer

导航

Function函数类型和class类型的异同

比如:

typedef FuncType = String Function(String str);

然后我们就可以:

FuncType aa = (String str) => str.trim();
aa("  ff");  // 或aa.call("  ff"),执行返回"ff"

 

但是它是可以转换为class的,即:

class FuncClass {
    String call(String str) {
        return str.trim();
    }
}

FuncClass aa = new FuncClass();
aa.call("  ff")

两者的主要区别在于,前者即Function的方式可以在代码“执行阶段”创建一个 函数执行逻辑;

而后者的FuncClass则必须是要在定义处 先 显示写出 逻辑;

如果我们将第一个Function的方式改成在定义出写一个function,即:

String funcType(String str) {
    return str.trim();
}

// 然后在FuncType aa = funcType,这样一对比就会发现FuncType和FuncClass没有太大区别;

 

这也是Rust的闭包是一个临时结构体的原因(即类似匿名类同时创建对象,就像new FuncClass()一样),不过还有区别是函数参数是放到结构体字段里的,即str是类的属性;

因此上面的FuncClass也可以改成:

// 这里假设自动生成了所有字段初始化的构造函数
class FuncClass {
    String str;
    String resullt
    void call() {
        result = str.trim();
    }
}

FuncClass aa = new FuncClass("  ff");
aa.call();
aa.result;  // "ff"

 

posted on 2023-11-12 17:26  Silentdoer  阅读(25)  评论(0编辑  收藏  举报