Некоторые из моих примечаний:
Позволяет асинхронную передачу
SIGINT
SIGFPE
SIGKILL
SIGALRM
SIGTERM
SIGUSR1, SIGUSR2
Отправка сигнала к другому процессу
, программист может решить, что сделать, когда сигнал получен
, Обнаруживающую прерванную запись
if (write(fd, buff, SIZE)<0) {
switch (errno) {
case EINTR:
warning(“Interrupted write\n”);
break;
}
}…
ListBuffer
- это изменяемый список, который имеет добавление с постоянным временем и преобразование с постоянным временем в список List
.
Список
является неизменяемым и имеет добавление с постоянным временем и добавление с линейным временем.
То, как вы создаете свой список, зависит от алгоритма, для которого вы будете использовать список, и порядка, в котором вы получаете элементы для его создания.
Например, если вы получаете элементы в порядке, обратном порядку их использования, тогда вы можете просто использовать List
и выполнять добавление. Сделаете ли вы это с помощью хвостовой рекурсивной функции, foldLeft
или чего-то еще, на самом деле не имеет значения.
Если вы получите элементы в том же порядке, в котором вы их используете, то ListBuffer
, скорее всего, является предпочтительным выбором, если производительность критична.
Но, если вы не на критическом пути и входной сигнал достаточно низкий, вы всегда можете перевернуть
список позже, или просто свернуть вправо
, или перевернуть
ввод, которое является линейным временем.
Что вы НЕ делаете, так это использовать List
и добавлять к нему. Это даст вам гораздо худшую производительность, чем просто добавление и реверсирование в конце.
Я всегда предпочитаю List и использую «свернуть / уменьшить» перед «для понимания». Однако «для понимания» предпочтительнее, если требуются вложенные «складки». Рекурсия - последнее средство, если я не могу выполнить задачу с помощью «fold / reduce / for».
поэтому для вашего примера я сделаю:
((0 to 3) :\ List[Int]())(_ :: _)
, прежде чем я сделаю:
(for (x <- 0 to 3) yield x).toList
Примечание: я использую «foldRight ( : \) "вместо" foldLeft (/ :) "здесь из-за порядка" _ ". Для версии, которая не генерирует исключение StackOverflowException, используйте вместо этого «foldLeft».
Умм .. это кажется мне слишком сложным. Могу я предложить
def listTestD = (0 to 3).toList
или
def listTestE = for (i <- (0 to 3).toList) yield i
Примечание. Этот ответ написан для старой версии Scala.
Классы коллекций Scala будут переработаны в Scala 2.8, поэтому будьте готовы изменить способ создания списков. очень скоро.
Каков способ создания Списка с прямой совместимостью? Понятия не имею, так как я еще не читал документы 2.8.
PDF-документ, описывающий предлагаемые изменения классов коллекций