小编Jai*_*rge的帖子

Scala修改器和类型参数化

我正在创建一个memoization类.

每个类都会记忆一个函数类型,并具有以下定义:

 class MemoizedFunction1[-T1, +R](f: T1 => R) {
    private[this] val cache = mutable.Map[T1, R]()
    def apply(t: T1): R = cache.getOrElseUpdate(t,f(t))
  }
Run Code Online (Sandbox Code Playgroud)

这很好地编译并按预期工作.但是,如果我删除修改后的private[this]我得到以下错误:

contravariant type T1 occurs in invariant position in type => scala.collection.mutable.Map[T1,R] of value cache
Run Code Online (Sandbox Code Playgroud)

为什么当我删除修饰符时,逆变类型T1会突然干扰地图的不变类型?修饰符如何影响类型参数化?

scala

12
推荐指数
2
解决办法
622
查看次数

从scala中的部分应用函数获取参数

scala中是否有一种方法可以从已经部分应用的函数中获取参数?

这是否有意义,应该完成,还是适合任何用例?

例:

def doStuff(lower:Int,upper:Int,b:String)= for(turn <- lower to upper) println(turn +": "+b)

想象一下,我一度知道'较低'的论点,我得到一个将它应用于'doStuff'的功能

val lowerDoStuff = doStuff(3,_:Int,_:String)

有没有办法让我回来?(例如,假设我在一个只收到'lowerDoStuff'并且现在需要知道第一个参数的函数内)

习惯性scala更喜欢内省/反思(如果可能的话).

scala currying partial-application

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

标签 统计

scala ×2

currying ×1

partial-application ×1