当你创建一个类的情况下,编译器创建了几个案例类东西的相应配套对象:一个apply工厂方法相匹配的主构造,equals,hashCode,和copy.
奇怪的是,这个生成的对象扩展了FunctionN.
scala> case class A(a: Int)
defined class A
scala> A: (Int => A)
res0: (Int) => A = <function1>
Run Code Online (Sandbox Code Playgroud)
只有在以下情况下才会这样:
有没有人使用它,或者知道它为什么被添加?它使用静态转发器方法稍微增加了生成的字节码的大小,并显示在#toString()伴随对象的方法中:
scala> case class A()
defined class A
scala> A.toString
res12: java.lang.String = <function0>
Run Code Online (Sandbox Code Playgroud)
UPDATE
使用单个apply方法手动创建的对象不会自动视为FunctionN:
object HasApply {
def apply(a: Int) = 1
}
val i = HasApply(1)
// fails
// HasApply: (Int => …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行一个火花程序,其中我有多个jar文件,如果我只有一个jar我无法运行.我想添加位于相同位置的jar文件.我已尝试过以下但它显示了依赖性错误
spark-submit \
--class "max" maxjar.jar Book1.csv test \
--driver-class-path /usr/lib/spark/assembly/lib/hive-common-0.13.1-cdh?5.3.0.jar
Run Code Online (Sandbox Code Playgroud)
如何添加另一个位于同一目录下的jar文件?
我想加/usr/lib/spark/assembly/lib/hive-serde.jar.
让我们想象一下范围内的以下项目:
object Thing {
var data: Box[String] = Empty
}
def perform[T](setter: Box[T] => Unit) {
// doesn't matter
}
Run Code Online (Sandbox Code Playgroud)
以下无法编译:
perform(Thing.data = _)
Run Code Online (Sandbox Code Playgroud)
错误消息是:
<console>:12: error: missing parameter type for expanded function ((x$1) => Thing.data = x$1)
perform(Thing.data = _)
^
<console>:12: warning: a type was inferred to be `Any`; this may indicate a programming error.
perform(Thing.data = _)
^
Run Code Online (Sandbox Code Playgroud)
以下编译:
perform(Thing.data_=)
Run Code Online (Sandbox Code Playgroud)
我已经通过创造更好的抽象来超越这个问题,但我的好奇心仍然存在.
谁能解释为什么会这样?
functional-programming scala type-inference anonymous-function
我在运行多个功能规范时遇到问题(使用specs2),特别是启动TestServer的测试,打开HTMLUNIT浏览器,然后导航到页面以检查元素.有问题的页面会加载我们在ajax请求上测试的元素.等待元素出现超时,并显示以下错误消息.
代码段:
trait CommonSteps extends BaseSpecfication {
val testServer: TestServer = TestServer(3333)
val testServerBaseURL: String = "http://localhost:3333/"
override def map(fs: => Fragments) =
Step(testServer.start()) ^ super.map(fs) ^ Step(testServer.stop())
}
class FunctionalTest1 extends Specification with CommonSteps { def is =
...
... extends When[...] {
val browser: TestBrowser = TestBrowser.of(HTMLUNIT)
browser.goTo(testServerBaseURL + "/some_path")
browser
}
... extends Then[...] {
browser.await.until("element that is loaded on ajax request").isPresent()
...
}
}
Run Code Online (Sandbox Code Playgroud)
我们得到错误:
Caused by: java.sql.SQLException: Attempting to obtain a connection from a pool …Run Code Online (Sandbox Code Playgroud)