2013-05-31 4 views
0

정수가 들어있는 여러 변수가있는 클래스가 있고 호출에 따라 그 중 하나가 특정 값만큼 증가하는 메서드가 필요합니다.여러 변수에 대해 increaser를 만드는 방법은 무엇입니까?

case class Bank { 
    private var depo = 0 
    private var loan = 0 


    def deposit(amount: Int): Boolean = { 
     if(amount>0) { 
     depo += amount 
     true 
     } else false 
    } 

    def withdraw(amount: Int): Boolean = { 
     if(amount > 0 && amount <= balance) { 
     depo -= amount 
     true 
     } else false 
    } 

    def balance_=(b:Int) = { 
    if(b >= 0) { 
     if(b < depo) withdraw(depo-b) else deposit(b-depo) 
    } else false 
    } 

    def balance = depo 
} 

나는 예금을 늘려야 할 때, 난 그냥

myBank.balance += 10 

를 호출하지만 지금은 대출을 늘려야 할 때, 내가 바로, 별도의 방법을 쓸 필요가?

increaser(varToIncrease, amount) 

같은 방법을 쓸 가능성이 가능성 또는 유용한 있나요인가? 아니면 모든 단일 var에 대해 "increaser"방법을 써야합니까?

+3

간단하지 않은 이유는 무엇입니까? –

+0

@ om-nom-nom에 동의합니다. 이 기능에서 추가 작업이 일어나지 않는 한 추가 기능을 수행하는 이유는 무엇입니까? (어쨌든 피해야 할 부작용과 같은) – cmbaxter

+0

답변 해 주셔서 감사합니다. 저는 스칼라를 처음 접했습니다. 내 문제는 var x를 100만큼 증가 시키려고 할 때 x.increase (100)를 사용하지만 var y를 증가 시키려면 y에 대한 두 번째 메소드를 작성해야한다는 것이다. 그건 나에게 이해가되지 않지만, 어떻게 해결해야할지 모르겠다. – Mikkel

답변

1

이 당신이 당신의 추가 의견에 따라 무엇을 찾고 있는지 :

case class Bank { 
    private var depo = 0 
    private var loans = 0 


    def deposit(amount: Int): Boolean = addTo(amount, depo += amount) 

    def loan(amount: Int): Boolean = addTo(amount, loans += amount) 

    private def addTo(amount:Int, func: => Unit):Boolean = { 
    if(amount > 0) { 
     func 
     true 
    } 
    else 
     false  
    } 



    def withdraw(amount: Int): Boolean = { 
     if(amount > 0 && amount <= balance) { 
     depo -= amount 
     true 
     } else false 
    } 

    def balance_=(b:Int) = { 
    if(b >= 0) { 
     if(b < depo) withdraw(depo-b) else deposit(b-depo) 
    } else false 
    } 

    def balance = depo 
    def loanAmount = loans 
} 

object BankTest{ 
    def main(args: Array[String]) { 
    val b = new Bank 
    println("Starting amounts, " + b.balance + ", " + b.loanAmount) 

    b.deposit(10) 
    println(b.balance) 
    b.deposit(-1) 
    println(b.balance) 

    b.loan(100) 
    println(b.loanAmount) 
    b.loan(-50) 
    println(b.loanAmount) 
    } 

} 

나는 각각 균형과 대출 금액을 증가시키기 위해 두 개의 공공 기능을 만들었습니다. 그런 다음, 그 중 하나를 늘리려면 작업을 수행하는 비즈니스 논리를 처리하는 간격을 만들었습니다 addTo.

+0

도와 주셔서 대단히 감사합니다, cmbaxter! – Mikkel

1

정수 매개 변수를 다른 메서드 내에서 증가시킬 수 없습니다. 원하는대로 증가 메소드를 작성하려면 변경 불가능한 오브젝트를 메소드에 전달해야합니다.

관련 문제