Отправка сообщений функциям в Scala

Я прорабатываю Семь языков за семь недель Брюса Тейта , и мне сложно понять его реализацию sizer.scala ] (Scala: День 3). В частности, рассмотрим следующий объект Singleton

object PageLoader {
    def getPageSize(url : String) = Source.fromURL(url).mkString.length
}

и следующий метод, который с помощью субъектов вычисляет количество символов на каждой веб-странице, заданной массивом urls .

def getPageSizeConcurrently() = {
    val caller = self

    for(url <- urls) {
        actor { caller ! (url, PageLoader.getPageSize(url)) }
    }

    for(i <- 1 to urls.size) {
        receive {
            case (url, size) =>
                println("Size for " + url + ": " + size)
        }
    }
}
  1. Что делает self см.? getPageSizeConcurrently ? Может ли self ссылаться на функцию?
  2. Если предположить, что self действительно относится к getPageSizeConcurrently , считается ли это довольно стандартным в мире Scala? Зачем отправлять сообщения функции, а не объекту, или наоборот?

ОБНОВЛЕНИЕ: В рассматриваемом коде self используется только один раз, но он начинается со следующего import .

import scala.io._
import scala.actors._
import Actor._

Просматривая API Scala , выясняется, что одноэлементный объект Actor имеет метод self . Даже если это self , назначенный вызывающему , тем не менее, я не понимаю, почему блок получения будет выполняться.

5
задан Chris Frederick 19 July 2011 в 07:23
поделиться