scala:在闭包中强制执行不可变类型

标签 scala

再问一次简单问题。

如何在下面的函数/闭包中指定 [more] 应该来自不可变类型?

否则我会产生如下副作用!

谢谢

var more  = 3

def increase[T: Numeric](x: T): T = implicitly[Numeric[T]].plus(x, more.asInstanceOf[T])

val inc =  increase[Int] _

more = 10

println( inc(5) )

最佳答案

不确定这就是您要寻找的,但是如果您想确保函数使用的值在某个点之后不会更改,您可以将其添加为单独的参数列表,并部分应用该函数及其值(value):

var more  = 3

def increase[T: Numeric](base: T)(x: T): T = implicitly[Numeric[T]].plus(x, base)

val inc =  increase[Int](more) _

more = 10

println( inc(5) ) // prints 8, as expected

关于scala:在闭包中强制执行不可变类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36402960/

相关文章:

scala - 优化 Spark 作业,它必须计算每个条目的相似度并为每个条目输出前 N 个相似项

scala - 如何考虑模式匹配右侧枚举的所有情况

scala - Scala 对象是否只能对同一文件中的那些对象可见?

java - 如何从 Cassandra 表中检索数据类型为 "list"的列?

scala - 如何在没有sbt命令的情况下在IntelliJ IDEA中调试/运行单个加特林模拟?

scala - future /成功竞赛

scala - 如何在不丢失类型的情况下代理对 HashMap 的调用

java - 在给定时间查找 .wav 的 'volume'

使用带有泛型类型接口(interface)的 Java 库时的 Scala 编译问题

scala - 无法证明与路径相关类型的等效性