我可以将任意函数传递给Scala中的另一个函数吗?
发布时间:2020-12-16 09:27:28 所属栏目:安全 来源:网络整理
导读:我是Scala的新手,能够将函数传递给其他函数非常简洁 – 但是我可以将任意函数引用传递给另一个函数吗?所述功能参数的arity将是固定的(也就是说,我也很好奇你是否可以通过任意arity函数).我不断遇到类型错误.我尝试使用Any但它似乎没有帮助. 例如,我有以下代
我是Scala的新手,能够将函数传递给其他函数非常简洁 – 但是我可以将任意函数引用传递给另一个函数吗?所述功能参数的arity将是固定的(也就是说,我也很好奇你是否可以通过任意arity函数).我不断遇到类型错误.我尝试使用Any但它似乎没有帮助.
例如,我有以下代码: class CodeRunner(val user_defined: (Int) => Unit) { def run(input: Int) = { user_defined(input) } } def arbitrary_code(input: Int) = { println("Running with input " + input) } val d1 = new CodeRunner(arbitrary_code) d1.run(4) 我得到: Running with input 4 现在,让我们说我想传递以下函数: def arbitrary_code(input: String) = { println("Running with input " + input) } 如何更改我的CodeRunner类来处理它们? 解决方法
通用类型允许您定义具有占位符类型的类,该类在实例化对象时指定.编译器很高兴,因为它可以确保一切都是类型安全的,并且您很高兴,因为您可以实例化对象并为值传递任意类型.
要在类中使用泛型类型,可以像这样修改它: class CodeRunner[T] (val user_defined: (T) => Unit) { def run(input: T) = { user_defined(input) } } “类CodeRunner”之后的[T]是重要的部分 – 它定义了一个泛型类型T(你可以用另一个大写字母替换T等),它将在类定义中使用. 所以,如果你定义一个方法: def arbitrary_code(input: String) = { println("Running with input " + input) } 然后将其传递给: val d1 = new CodeRunner(arbitrary_code) …编译器然后说“啊哈,对于CodeRunner的这个实例,泛型类型T是一个字符串”.如果你调用 d1.run("string") 编译器会很高兴,但不会让你传入d1.run(4). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |