gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:44:18 25 4
gpt4 key购买 nike

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

在编写 Scala 代码时,以这种方式处理 Option 参数很有用:

val text = Option("Text")
val length = text.map(s => s.size)

但据我所知,每个s => s.size都会带来一个新的Function1[A, B]。例如,如果我进行 8 个这样的转换,它将带来 8 个额外的类。当绑定(bind)表单时,我非常频繁地使用此类片段,所以问题是:

我应该少用它,或者用 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 方法限制(尽管有 are ways around it )。由于每个类都需要几个方法(构造函数和应用),这可能是一个问题。

否则,Sun/Oracle JVM 上的类会进入 PermGen 空间,如果确实需要,您可以在启动 JVM 时对其进行调整。这真的没关系。是的,您将有很多类,可能有数万个,但是 JVM 可以很好地处理它(至少如果您愿意提前告知它会发生什么)。除非您知道自己很可能会遇到一些不寻常的限制,否则您不必太担心。

更常见的是,人们可能会担心创建所有这些函数会导致性能损失 - 但如果您现在实际上没有遇到这种损失,也不必担心;这是 Scala 编译器原则上可以解决的问题,而且它一直在变得越来越聪明。因此,只要按照惯用的方式编写代码,除非现在是一个很大的性能问题,否则就希望编译器能够拯救你。很有可能会发生这种情况,而且更有可能的是,您会发现以“正确”的方式编写它,然后在需要时重构以提高性能比采用更尴尬的结构的策略更容易,以防万一成为一个问题。当然,有些地方你可能事先知道肯定会成为瓶颈,比如将从一个大文件中读取的每个字节包装在一个选项中,但除了这样的明目张胆的东西之外,你最好采取 react 性行动已知问题胜过主动避免关闭。

关于斯卡拉。小函数太多,类太多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13919200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com