scala - 为什么隐式参数与非隐式参数结合使用时不起作用
问题描述
一个非常简单的用例,假设我有一个Foo
接受 2 个参数的类,1 是普通参数,1 是隐式的。
class Foo(val msg: String, implicit val n: Int) {
def multiplier = msg * n
}
implicit val num: Int = 4
val foo = new Foo("yo")
println(foo.msg)
我知道如果我将隐式参数移动到另一个列表(即 curried )它将起作用class Foo(val msg: String)(implicit val n: Int)
。但可以说出于某种原因我不想这样做。
有人可以解释为什么当前版本的实现不起作用吗?
解决方案
语言规范就是这样写的。您必须在单独的参数列表中定义。语言规范根本不是在谈论隐式参数,而只是在谈论隐式参数列表:
方法的隐式参数列表 将参数…
(implicit p1,…,pn)
标记为隐式。一个方法或构造函数只能有一个隐式参数列表,并且它必须是给定的最后一个参数列表。p1
pn
可以在邮件列表档案或其他地方检查是否有某些原因。
推荐阅读
- c++11 - 使用 Wasm-ld 链接库时出错:std 函数上的符号类型 mimsatch
- google-admin-sdk - 目录 API 缺少用户的“网站 []”对象
- sql - 试图在 Laravel 中发布一个对象数组。ErrorException:从文件中的空值创建默认对象
- javascript - 为什么 useEffect 呈现意外的值?
- php - 将单选按钮添加到标准 Wordpress 注册表单
- laravel - 无法解码 json laravel
- android - 关闭 android 应用程序时忽略 Form.destroy
- prolog - Prolog 中的格式输出
- c - 如何从无符号字节转换为整数?
- react-native - 如何在 react-native 中创建线性渐变(在图像顶部和应用栏下方)