Scala的堆栈:()与{}

马克·庞克

我在写一些scala代码:

def getOpponentOf(request) 
   = if (getPlayerTupleOf(request)._1.id == request.id)
        getPlayerTupleOf(request)._1
     else getPlayerTupleOf(request)._2

现在,我的当务之急是:“嘿,为什么我不定义一个引用getPlayerTuple的局部变量,然后再使用该引用。

但是然后我将不得不使用{}范围,而不是()(它更具功能性?)。假设函数getPlayerTupleOf也是完美的功能,即使用()范围,无副作用等。

例如,执行上述操作与此相对时,性能/编译器的含义是什么:

def getOpponentOf(request) = {
    val playerTuple = getPlayerTupleOf(request)

    if (playerTuple._1.id == request.id)
        playerTuple._1
     else playerTuple._2
}

谢谢,马克

dzs

使用块{}并不反对函数式编程。Scala的“ val”声明等同于其他功能语言(例如ML,F#)中存在的“ let”绑定,因此它们完全是“功能”概念。没有功能的是使用定义为var而不是val变量

关于性能:编译器通常无法确定您的方法是否具有副作用,并且可以对“具有相同参数的多个调用”进行“缓存”(例如,以局部“变量”的形式)。因此,编译后的代码将有效地多次调用该方法。JIT仍然可以选择在运行时有效地对其进行优化,并且它可能会或可能不会发生,这取决于您的方法的实现方式和其他因素。

我认为还需要考虑其他方面:简洁,可维护性,第二个版本在这里胜出:没有代码重复,并且变量名称可以帮助理解代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

堆栈-Scala实施/性能问题

来自分类Dev

Scala中的Monad变压器堆栈

来自分类Dev

Scala编译器的堆栈溢出保护

来自分类Dev

在 Maven 构建期间增加 Scala 堆栈大小

来自分类Dev

Scala:在我的Scalatra应用程序中打印堆栈跟踪

来自分类Dev

Scala正则表达式堆栈溢出

来自分类Dev

无堆栈Scala播放框架运行时错误

来自分类Dev

相互递归的scala解析器中的堆栈溢出

来自分类Dev

为什么此Scala代码出现堆栈溢出错误?

来自分类Dev

使用Scala从Play2更改堆和堆栈大小

来自分类Dev

在Scala中,如何使用“ toArray()”将堆栈转换为数组?

来自分类Dev

Scala中的堆栈修改特性不起作用

来自分类Dev

Scala中的堆栈修改特性不起作用

来自分类Dev

Scala中的堆栈修改特性不起作用

来自分类Dev

无堆栈Scala播放框架运行时错误

来自分类Dev

Scala:带有未来堆栈溢出错误的递归

来自分类Dev

如何在Scala猫中的monad变压器堆栈顶部定义局部方法

来自分类Dev

有什么方法可以仅使用Scala的代码来配置堆栈内存大小?

来自分类Dev

建议与Flink和Scala一起使用的堆栈是什么?

来自分类Dev

java.lang.VerifyError:使用Scala Pickle的操作数堆栈上的类型错误

来自分类Dev

递归与堆栈

来自分类Dev

YouTubePlayerFragment堆栈

来自分类Dev

AND 堆栈指针

来自分类Dev

堆栈导航器堆栈视图

来自分类Dev

从堆栈/队列中弹出堆栈

来自分类Dev

如何实现堆栈上堆栈?

来自分类Dev

()与{}的Scala

来自分类Dev

调用堆栈和评估堆栈如何相关?

来自分类Dev

在通用堆栈类中创建通用堆栈