2010-04-30 3 views
1

Dans Scala 2.7, je souhaite utiliser une méthode en tant que paramètre d'une autre méthode de la même classe.Scala 2.7: la référence est ambiguë (importée deux fois)

J'ai une classe et des objets qui sont compagnons:

class mM(var elem:Matrix){ 
    //apply a function on a dimension rows (1) or cols (2) 
    def app(func:Iterable[Double]=>Double)(dim : Int) : Matrix = { 
     ... 
    } 
    //utility function 
    def logsumexp(): Double = {...} 
} 

object mM{ 
    def apply(elem:Matrix):mM={new mM(elem)} 
    def logsumexp(elem:Iterable[Double]): Double ={ 
     this.apply(elem.asInstanceOf[Matrix]).logsumexp() 
    } 
} 

Normalement, j'utilise logsumexp comme ça mM(matrix).logsumexp, mais si vous voulez appliquer aux lignes que je ne peux pas utiliser mM(matrix).app(mM.logsumexp)(1), je reçois l'erreur:

error: reference to mM is ambiguous; 
it is imported twice in the same scope by 
import mM 
and import mM 

Quelle est la solution la plus élégante? Dois-je changer logsumexp() à une autre classe?

Merci =)

+1

Utilisez-vous Scala 2.7? Je l'ai testé sous 2.8 et ça marche bien. –

+0

En effet, j'utilise Scala 2.7 =) –

+0

Cela ne répond pas à la question initiale, mais pourquoi lancez-vous un 'Iterable [Double]' en 'Matrix' avec' asInstanceOf' au lieu de simplement prendre un 'Matrix' comme argument? –

Répondre

0

J'ai finalement utilisé new mM(matrix) et non mM(matrix) instructions à l'intérieur de mon mM de classe et d'éviter l'erreur.

@Rex Kerr: Vous avez raison, j'ai changé le type en Matrix.

Merci

Questions connexes