2015-08-21 11 views
2

Я был уверен, что нижеследующие символы подчеркивания означают значение функции единицы, значение которого игнорируется. (Ниже взято из книги функциональное и реактивное моделирование домена). Если это правильно, то у меня есть вопрос о коде ниже:Каким образом нижний репозиторий передается (передается) в каждый вызов функции?

case class AccountRepository(no: String) 


trait AccountService[Account, Amount, Balance] { 
    def open(no: String, name: String, openingDate: Option[Date]): AccountRepository => Try[Account] 
    def close(no: String, closeDate: Option[Date])AccountRepository => Try[Account] 
    def debit(no: String, amount: Amount): AccountRepository => Try[Account] 
    def credit(no: String, amount: Amount): AccountRepository => Try[Account] 
    def balance(no: String): AccountRepository => Try[Balance] 
} 


object App extends AccountService { 
    def op(no: String) = for { 
    _ <- credit(no, BigDecimal(100)) // isn't underscore here mean we neglect the return value as its in most cases unit? this mixes me up. How do we refer again to the return value if it goes into the underscore which is normally used for unit response. 
    _ <- credit(no, BigDecimal(300)) 
    _ <- debit(no, BigDecimal(160)) 
    b <- balance(no) 
    } yield b 
} 

scala> op("a-123") 
res0: AccountRepository => scala.util.Try[Balance] = <function1> 

Будет ли этот код работать правильно? Это будет, если мы дадим некоторую дополнительную мощность для функции 1, которая является типом, который получает резьбу через понимание.

Так что я должен перейти к res0 репозиторий - Я не понимаю, как это хранилище дросселируется для каждого метода кредитной/дебетовой выше? Я понимаю, что op возвращает функцию из репозитория для учетной записи, однако, что меня смешивает, все эти подчеркивания - не подчеркивает ли средство для понимания, мы избавляемся от возвращаемого значения функции? и если мы проигнорируем возвращаемое значение, то как мы можем передать эти функции в репозиторий?

+1

Если вам не нужно значение с шага последовательности для понимания на другом шаге или в уроке, вы можете назначить его знаку подчеркивания, который в основном говорит, что он вам не нужен. Если вам это нужно, вы введете имя 'val', чтобы присвоить его (например,' b' в этом примере), чтобы позднее вы могли ссылаться на него – cmbaxter

+0

, но функции 'credit'' debit' возвращают функцию ' AccountRepository => Попробуйте [Учетная запись] ', поэтому мне кажется, что мне как-то нужно вернуть значение из шага последовательности, чтобы я мог дальше применять его с правильным' accountRepository', чтобы вычисление могло иметь место, поэтому я не знаю, Понимаете, почему его сказали, что это не нужно, это выглядит так, как будто требуется возвращаемое значение, но пример не заполняет его. – Jas

ответ

0

_ не означает, что возвращаемое значение игнорируется только в том случае, если мы не ссылаемся на него в коде.

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

  • Нет связанных вопросов^_^