在给出类型不匹配错误Scala的方法内调用方法

在给出类型不匹配错误Scala的方法内调用方法,scala,vector,Scala,Vector,所以我试图从另一个方法(“中心”)内部调用一个方法(“Mean”),它给出了一个类型不匹配错误 但是,如果我单独执行方法(“平均值”),并将其结果存储在某个变量中,然后使用该变量而不是方法(“平均值”)执行方法(“中心”),它就会工作 谁能解释一下原因吗 val X = Vector(3.0,4,5) val Y = Vector(6,9.0,15) type D = Double type V = Vector[D] def Mean (v:V)= v.sum/v.length val me

所以我试图从另一个方法(“中心”)内部调用一个方法(“Mean”),它给出了一个类型不匹配错误

但是,如果我单独执行方法(“平均值”),并将其结果存储在某个变量中,然后使用该变量而不是方法(“平均值”)执行方法(“中心”),它就会工作

谁能解释一下原因吗

val X = Vector(3.0,4,5)
val Y = Vector(6,9.0,15)

type D = Double
type V = Vector[D]
def Mean (v:V)= v.sum/v.length
val meanX = Mean(X)
def Centre (v:V) = v.map(X => X - Mean(X))
Centre(X)
错误:

command-1723108043672149:8: error: type mismatch;
found   : D
(which expands to)  Double
required: V
(which expands to)  scala.collection.immutable.Vector[Double]
def Centre (v:V) = v.map(X => X - Mean(X))
但是如果我用“meanX”而不是“Mean(X)”,它是有效的:

Mean()
被定义为接受类型为
V
(即
Vector[Double]
)的参数,但在这段代码中,
V.map(X=>X-Mean(X))
您试图传递一个
Double
值,因为您已经重新定义了变量
X
。因此错误

我想你要做的是
v.map(n=>n-Mean(X))
或者,更好的是,
v.map(u-Mean(X))
。这样
X
只有一个意思

Centre: (v: V)scala.collection.immutable.Vector[Double]
res36: scala.collection.immutable.Vector[Double] = Vector(-1.0, 0.0,1.0)