Sorunu çözmeye çalışıyorum ve Scala'da okuduğum farklı stilleri denedim, ancak bunların hiçbiri çalışmıyor. Benim kodudur:Scala işlevim neden son bir satır olursa olsun, Birim türünü döndürüyor?
....
val str = "(and x y)";
def stringParse (exp: String, pos: Int, expreshHolder: ArrayBuffer[String], follow: Int)
var b = pos; //position of where in the expression String I am currently in
val temp = expreshHolder; //holder of expressions without parens
var arrayCounter = follow; //just counts to make sure an empty spot in the array is there to put in the strings
if(exp(b) == '(') {
b = b + 1;
while(exp(b) == ' '){b = b + 1} //point of this is to just skip any spaces between paren and start of expression type
if(exp(b) == 'a') {
temp(arrayCounter) = exp(b).toString;
b = b+1;
temp(arrayCounter)+exp(b).toString; b = b+1;
temp(arrayCounter) + exp(b).toString; arrayCounter+=1}
temp;
}
}
val hold: ArrayBuffer[String] = stringParse(str, 0, new ArrayBuffer[String], 0);
for(test <- hold) println(test);
Benim hatadır:
Driver.scala:35: error: type mismatch;
found : Unit
required: scala.collection.mutable.ArrayBuffer[String]
ho = stringParse(str, 0, ho, 0);
^one error found
Bir, yöntem bildiriminde argümanlar sonra eşittir işareti şöyle eklediğinizde: Bu dönüştürürler
def stringParse (exp: String, pos: Int, expreshHolder: ArrayBuffer[String], follow: Int) ={....}
"Herhangi biri". Bunun nasıl çalıştığına dair kafam karıştı. Herhangi bir fikir? Çok takdir edildi.
+1 bir şey için newb her zaman karşı karşıya gelecek. Açıklama aynı zamanda küçük bir karşı-intikamdır. – aitchnyu