2013-10-09 4 views
1

приведенный ниже код работает отлично, если я просто делаю его «класс case». Однако я, конечно, не хочу этого для изменяемого объекта, но, изменив его на обычный класс, он больше не понимает параметр анонимной функции в конце. Не уверен, почему я не могу пройти мимо этого, я пробовал несколько вариантов и не могу понять, почему это делает класс case. (2.10.2 Скала) - благодаряПри возникновении проблем с параметром curried

/** 
* 
* @param target - can be any large target number 
* @param perPiece - at what percentage interval is todo called 
* @param todo - passed current percentage complete 
*/ 
class ProgressTool(target:Double, perPiece:Double) (todo: (Double)=>Unit) extends Mutable { 

    private[this] var lastUpdate:Double =0.0 

    def update(atPos:Double) = { 
    val step = atPos - lastUpdate 

    if (step/target >=perPiece) { 
     lastUpdate += step 
     todo(lastUpdate) 

    } 
    } 

} 


object TestProgressTool extends App { 

    val x = new ProgressTool(1000,.01) { x:Double => 
    println("Hello "+ x) 
    } 
} 

отсутствуют аргументы для конструктора ProgressTool в классе ProgressTool вал х = новый ProgressTool (1000, +0,01) {х: Double => ^

ответ

0

Используя круглые круглые скобки вокруг второго списка паров заживает код слишком d может быть менее неожиданным:

object TestProgressTool extends App { 
    val x = new ProgressTool(1000,.01) ({ x:Double => 
    println("Hello "+ x) 
    }) 
} 
1

Не уверен, почему это, кажется, работает, но попробуйте (обратите внимание дополнительные скобки вокруг конструктора с первыми аргументами):

object TestProgressTool extends App { 

    val x = (new ProgressTool(1000,.01)) { x:Double => 
    println("Hello "+ x) 
    } 
} 
+0

Спасибо, это моя методология здесь? Я имею в виду, не следует ли мне пытаться выставить параметр блока кода в классе - это лучше сделано каким-то другим способом? – LaloInDublin

+0

Нет, это кажется мне неразумным. – Shadowlands

Смежные вопросы