Что именно этот фрагмент делает в scala?

Я пытаюсь понять пример twitter gizzard rowz, и я не могу понять, что этот маленький фрагмент делает в scala:

package com.twitter.rowz
import com.twitter.gizzard.nameserver.{Forwarding, NameServer}
import com.twitter.gizzard.shards.ShardException

class ForwardingManager(nameServer: NameServer[Shard]) extends (Long => Shard) {  
    def apply(id: Long) = nameServer.findCurrentForwarding(0, id)
}

что именно расширяет класс?


person Norm    schedule 02.03.2011    source источник
comment
Кажется, вы забыли добавить новую строку между import com.twitter.gizzard.shards.ShardException и lass ForwardingManager(name...   -  person tenshi    schedule 02.03.2011


Ответы (2)


(A=>B) is Function1[A,B]

Эти строки строго эквивалентны:

class ForwardingManager(nameServer: NameServer[Shard]) extends (Long => Shard)
class ForwardingManager(nameServer: NameServer[Shard]) extends Function1[Long,Shard]
person shellholic    schedule 02.03.2011

Этот фрагмент определяет класс ForwardingManager, который расширяет Function1[Long, Shard] (Long => Shard — это просто краткая форма).

В качестве другого примера вы можете посмотреть на класс Parser из библиотеки Scala:

https://github.com/scala/scala/blob/master/src/library/scala/util/parsing/combinator/Parsers.scala#L190

В этом случае (Input => ParseResult[T]) совпадает с Function1[Input, ParseResult[T]]. Этот конкретный пример также описан в Programming in Scala, 2-е издание (раздел 33.6).

person tenshi    schedule 02.03.2011