将现有变量标记为隐式方法的候选者
Mark existing variable as candiate for implicit method
我尝试编写一个方法,该方法应该使用来自周围范围的变量。问题是我无法访问定义变量的代码部分。像这样:
object Example extends App {
val myvar = 1.0 // cannot change that code
def myMethod()(implicit value:Double) = {
print(value)
}
myMethod()
}
这失败了,因为 myMethod
找不到适合 value
的隐式。
除了定义指向 value
的新隐式变量外,还有什么方法可以在 "mark" value
定义后将其作为隐式变量?
背景:我们使用自动创建 SparkContext
(名为 sc
)的 Spark-Notebook。由于 sc
是社区中此变量的众所周知的名称,我们不想引入另一个变量名称。
如果您只是不想拥有未标记为 sc
的 SparkContext
实例,您可以将其分配给隐式下划线变量,如下所示:
implicit val _: SparkContext = sc
这会在作用域内创建一个正确类型的隐式变量供您的函数使用。
或者,您始终可以显式传递隐式变量,在上面的示例中,您可以这样做
myMethod()(myvar)
这就是我要使用的解决方案。
我尝试编写一个方法,该方法应该使用来自周围范围的变量。问题是我无法访问定义变量的代码部分。像这样:
object Example extends App {
val myvar = 1.0 // cannot change that code
def myMethod()(implicit value:Double) = {
print(value)
}
myMethod()
}
这失败了,因为 myMethod
找不到适合 value
的隐式。
除了定义指向 value
的新隐式变量外,还有什么方法可以在 "mark" value
定义后将其作为隐式变量?
背景:我们使用自动创建 SparkContext
(名为 sc
)的 Spark-Notebook。由于 sc
是社区中此变量的众所周知的名称,我们不想引入另一个变量名称。
如果您只是不想拥有未标记为 sc
的 SparkContext
实例,您可以将其分配给隐式下划线变量,如下所示:
implicit val _: SparkContext = sc
这会在作用域内创建一个正确类型的隐式变量供您的函数使用。
或者,您始终可以显式传递隐式变量,在上面的示例中,您可以这样做
myMethod()(myvar)
这就是我要使用的解决方案。