作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想传递一个函数 fun1
作为 fun2
的参数.
然而fun1
需要一个隐式参数。是否可以在 fun2
中定义该隐式值?
代码是这样的:
import org.json4s._
import org.json4s.jackson.JsonMethods._
def fun1(json:JValue)(implicit formats: Formats) = {
//do something
}
def fun2(f: (JValue) => RatEvent,line:String ) = {
implicit val formats = DefaultFormats //has been defined in import
val json = parse(line) //covert string to jvalue
val result = f(json)
}
fun1
至
fun2
, 编译器提示它找不到 fun1 的隐式值。
fun2(fun1,"asdfasdf") //error here, fun1 is lack of an implicit value
fun2
的形状来解决问题IE。
def fun2(f: (JValue)(implicit Formats) => RatEvent,line:String ) //doesn't compile
def fun2(f: (JValue) => RatEvent,lines:RDD[String] )(implicit sc:SparkContext) = {
for (
line <- lines
){
implicit val formats = DefaultFormats //has been defined in import
val json = parse(line) //covert string to jvalue
val result = f(json)
......
}
}
formats
必须在
lines
内定义的
map
函数(我用
for
代替)。
最佳答案
Scala 函数值的 apply
方法只有一个参数列表,不带任何隐式参数。你对此无能为力。
您可以更改 fun2
的形状将额外参数作为普通参数:
class J; class F; class R
def fun1(j: J)(implicit f: F): R =
new R
def fun2(fn: (J, F) => R) {
fn(new J, new F)
}
fun2(fun1(_)(_))
fun2(fun1)
好你自找的。
fun2
的形状。如下:
class J; class F; class R
def fun1(j: J)(implicit f: F): R =
new R
def fun2(fn: J => R)(implicit f: F) {
fn(new J)
}
implicit val f = new F
fun2(fun1)
Formats
在
fun2
主体内的隐式范围内,但我不知道这是否是您的问题的必要条件,或者只是您压缩代码以适应问题的方式的一些意外。
关于scala - 如何传递带有隐式参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29837612/
我是一名优秀的程序员,十分优秀!