相关疑难解决方法(0)

Scala中的apply函数是什么?

我从来没有从设计的解组和修饰名词中理解它(一个AddTwoapply增加了两个!)的例子.

我理解它是语法糖,所以(我从上下文推断)它必须被设计为使一些代码更直观.

具有apply函数的类有什么意义?它用于什么,以及它使代码变得更好的目的(解组,修改名词等)?

在伴侣对象中使用时如何帮助?

scala

297
推荐指数
4
解决办法
10万
查看次数

我可以在Scala中重载括号吗?

试图弄清楚如何在类上重载括号.

我有这个代码:

class App(values: Map[String,String])
{
  // do stuff
}
Run Code Online (Sandbox Code Playgroud)

我希望能够以这种方式访问​​值Map:

var a = new App(Map("1" -> "2"))
a("1") // same as a.values("1")
Run Code Online (Sandbox Code Playgroud)

这可能吗?

scala

8
推荐指数
3
解决办法
1677
查看次数

(重新)在scala中定义()

假设我在scala中有一个MyList类,列表作为私有成员.是否有可能为我的类定义"()"以在给出正索引的情况下返回预期的东西,并在负的情况下从结尾开始(就像在python中一样)?

scala

4
推荐指数
1
解决办法
112
查看次数

从Scala中的类型别名创建对象

如何从scala中的类型别名构造对象?

type MyType = List[Int]
println(List[Int]())
println(MyType())  // error: not found: value MyType
Run Code Online (Sandbox Code Playgroud)

这在必须返回该类型的新实例的函数中存在问题.基本示例:

def foo(x: MyType): MyType = {
  if (x.head == 0) MyType() // Should Nil be used?
  else if (x.head == -1) new MyType(1,2,3,4)
  else x
}
Run Code Online (Sandbox Code Playgroud)

怎么会foo不知道实际的类型MyType

scala typedef

4
推荐指数
1
解决办法
2116
查看次数

Scala 函数作为对象与类

trait MyFunctionTrait extends ((Int, Int) => Double)

class MyFunction1 extends MyFunctionTrait {
   override def apply(a: Int, b: Int) => Double = a/b 
}

object MyFunction2 extends MyFunctionTrait {
   override def apply(a: Int, b: Int) => Double = a/b 
}
Run Code Online (Sandbox Code Playgroud)

我不完全确定如何使用哪一个。区别是如何运行它们?

scala> val f = new MyFunction1
f: MyFunction1 = <function2>

scala> f(1,2)
res50: Double = 0.0

scala> MyFunction2(1,2)
res48: Double = 0.0
Run Code Online (Sandbox Code Playgroud)

我确实知道单例对象和类之间的区别是什么。我想知道在定义函数的特殊情况下的用例。文章中解释了函数,但我已经看到它被编程为一个类和一个对象,所以我想知道最佳实践是什么时候以及为什么。

在我的特定情况下,我想以柯里化风格将另一个函数作为函数的参数,然后MyFunction根据他们获得的函数来做略有不同的事情:如何编写柯里化 Scala 函数特征?

请回答1)一般情况,2)特殊情况。

PS:我试图将关于如何咖喱以及是类还是对象的问题分开 - 似乎不太好,就在这里。

scala

4
推荐指数
1
解决办法
3440
查看次数

Scala工厂被编译器忽略了吗?

我花了这么多时间在我的伴侣对象中组合一个工厂方法,如下所示:

class Stuff(val a: Int, val b: Long) { this() = this(0,0L) }

object Stuff {
  def apply(a:Int, b:Int) = new Stuff(a, b.toLong)
}
Run Code Online (Sandbox Code Playgroud)

但是,当我以为我杀了它时,我就去编译,这不起作用:

val widget = new Stuff(1,2)
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事!?我刚做完了!?救命!!!

scala syntactic-sugar companion-object

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