小编rjs*_*ean的帖子

为什么case类伴随对象扩展了FunctionN?

当你创建一个类的情况下,编译器创建了几个案例类东西的相应配套对象:一个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)

scala case-class companion-object

38
推荐指数
4
解决办法
3135
查看次数

spark submit在classpath中添加多个jar

我正在尝试运行一个火花程序,其中我有多个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.

classpath submit apache-spark

35
推荐指数
6
解决办法
9万
查看次数

参数列表中的类型推断与setter不起作用

让我们想象一下范围内的以下项目:

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

7
推荐指数
1
解决办法
465
查看次数

如何在Play 2.0.1中使用TestServer运行多个功能规范?

我在运行多个功能规范时遇到问题(使用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)

scala playframework playframework-2.0

6
推荐指数
1
解决办法
1223
查看次数