Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 斯卡拉。太多的小函数,太多的类?_Scala - Fatal编程技术网

Scala 斯卡拉。太多的小函数,太多的类?

Scala 斯卡拉。太多的小函数,太多的类?,scala,Scala,我是Scala新手,但有一些Java背景 编写Scala代码时,使用以下样式处理选项参数非常有用: val text = Option("Text") val length = text.map(s => s.size) 但据我所知,每个s=>s.size都会带来一个新的函数1[a,B]。例如,如果我做了8次这样的转换,它将带来8个额外的类。在绑定表单时,我大量使用这些片段,因此问题是: 我应该少用它,或者用if表示法代替它,或者这样的类泛滥对JVM来说不是很关键,或者Scala编译器可

我是Scala新手,但有一些Java背景

编写Scala代码时,使用以下样式处理选项参数非常有用:

val text = Option("Text")
val length = text.map(s => s.size)
但据我所知,每个
s=>s.size
都会带来一个新的
函数1[a,B]
。例如,如果我做了8次这样的转换,它将带来8个额外的类。在绑定表单时,我大量使用这些片段,因此问题是:

我应该少用它,或者用if表示法代替它,或者这样的类泛滥对JVM来说不是很关键,或者Scala编译器可以发挥某种魔力

更新:一个可能更具体的例子是:

case class Form(name: Option[String], surname: Option[String])
val bindedForm = Form(Option("John"), Option("Smith"))
val person = new Person
bindedForm.name.foreach(a => person.setName(a))
bindedForm.surname.foreach(a => person.setSurname(a))

它会产生两个不同的
Function1[String,String]
类吗?如果有数百个这样的转换呢

如果您是为Android开发的,那么您可能会使用Dalvik运行代码,它有一个恼人的64k方法限制(尽管有)。因为每个类都需要两个方法(构造函数和应用),所以这可能是个问题

否则,Sun/Oracle JVM上的类将进入PermGen空间,如果确实需要,您可以在启动JVM时对其进行调整。这真的没关系。是的,您将有很多类,可能有上万个,但是JVM可以很好地处理它(至少如果您愿意让它了解预期的内容)。除非你知道你很可能会遇到一些不寻常的约束,否则这不是你应该担心的事情


更经常的情况是,人们可能会担心创建所有这些函数会带来性能损失——但如果您现在没有实际遇到这种损失,也不要担心这一点;这是Scala编译器原则上可以解决的问题,而且它一直在变得更聪明。因此,只需以惯用的方式编写代码,除非它现在是一个大的性能问题,只希望编译器会来拯救您。这是一个很好的机会,而且你会发现用“正确”的方式编写它,然后在需要的地方进行重构以提高性能比采用一种策略使用更笨拙的构造以防出现问题更容易。当然,有些地方你可能事先就知道会成为瓶颈,比如把你从一个大文件中读取的每个字节都包装在一个选项中,但除了那些明目张胆的东西,与主动避免关闭相比,您最好对已知问题做出反应。

在开发J2ME应用程序时,我们通常关心类的数量。今天关心这一点是没有意义的,因为java8删除了permgen。因此,它只是进入堆。