2, функция входа

Во-первых, функция входа

1. Определенные функции

Когда Scala определены функции, вы должны определить имя функции, параметры функции функции. 

Наша первая функция заключается в следующем: 
  DEF SayHello (имя: String, Возраст: Int) = { 
    IF (Возраст> 18) {Е ( "% A Привет Big Boy \ п-S, вы", имя); Возраст } 
   еще {Е ( «% S Привет, вы Little Boy \ n-», имя);} Возраст 

требования Scala должны быть предоставлены всем параметрам типа, но не обязательно дать тип возвращаемого значения функции, до тех пор , как функция права тело оператор не содержит рекурсию, Scala может определить тип возвращаемого в соответствии с их выражениями справа. 



######### 
Scala> Вставить 
// Вход в режим Вставить (Ctrl-D , чтобы закончить) 

DEF на SayHello (имя: String, Возраст: Int) = { 
 IF (Возраст> = 18) { 
  в Е ( «привет ,% \ п-S, A Big Boy ты! "имя) 
  Возраст 
 } {еще 
  Е (" Привет,% \ n- "S, A Little Boy вы !, имя) 
  Возраст 
 } 
} 

// выходящий Paste РЕЖИМА, теперь интерпретации.

SayHello: (имя: String, возраст: Int) Int 


Скала> SayHello ( "Лев", 30) 
Привет, Лев, ты большой мальчик! 
res40: Int = 30


2, функция определена в блоке кода

Односторонняя функция: Защиту SayHello (имя: String) = печать ( «Привет,» + имя) 

Если несколько строк кода в теле функции, вы можете использовать блок кода способом посылки строк кода, блок кода возврата значение последней строки возвращаемое значение является целой функцией. 
В отличие от Java, вместо того , чтобы использовать возврат возвращаемого значения. 

Такие функции, как, для функции аккумулятора: 
DEF SUM (n-: Int) = { 
  вар SUM = 0; 
  для (I < - . 1 до n-) + SUM = I 
   SUM 
} 


###### 
Scala > Вставить 
// Вставить режим ввода (Ctrl-D , чтобы закончить) 

DEF SUM (n-: Int) = = {# , когда написано, возвращаемое значение функции есть 
 переменная Result = 0 
 для (I < - 1 до n-.) { 
  Результат + = I
  } 
 Результат 
} 

Выход Вставить РЕЖИМ // теперь Устный. 

SUM (тот n-: Int) Int 


Scala> Сумма (10) 
res41: Int = 55


3, рекурсивные функции

Если рекурсивная функция является функцией самого тела, вы должны вручную вернуть тип функции даются. 

Например, чтобы достичь классического числа Фибоначчи: 
DEF Fab (н-: Int): Int = {# Int второй тип возврата 
IF (п < = 1. ) 1. 
Остальное FAB + Fab (N- (1-н.) 2) 
}


Во-вторых, параметры по умолчанию и параметры с именем

1, параметры по умолчанию

В Scala, иногда мы называем некоторые функции, мы не хотим , чтобы дать конкретные значения параметров, и вы хотите использовать свои собственные значения параметров по умолчанию, то используется определение параметров по умолчанию при определении функции. 

SayHello DEF (Firstname: Строка, MiddleName: String = "Уильям", 
LastName: String = "Крофт") = Firstname + "" + MiddleName + " " + 
LastName 

параметр , если не задано, то он будет применен последовательно с правой стороны параметры. 




#### 
Scala> Вставить 
// Вход в режим Вставить (Ctrl-D , чтобы закончить) 

DEF на SayHello (имя: String, Возраст: Int = 20) { 
 Print ( "Hello" + имя + "вы IS Возраст" + Возраст) 
} 

// Выход из режима Paste, теперь Устный. 

SayHello: (имя: String, Возраст: Int) Единица 

Scala> SayHello ( "LEO") 
вводное, LEO, вы Возраст 20 IS 
Scala> SayHello ( "LEO", 30) 
Привет, Лео, ты возраст 30


2, с именем параметра

При вызове функции, или не может функционировать в соответствии с порядком , определенными параметрами , чтобы передать параметры для передачи , но с использованием имени параметра. 

SayHello (Firstname = «Мик», LastName = «Нина», MiddleName = «Джек») 

может быть также использована в сочетании с не назвали и имя параметра, параметр будет называться , но не в первом ряду с именем параметра. 

SayHello ( "Мик", LastName = "Нина", ОТЧЕСТВО = "Джек") 



#####


В-третьих, vararg

1, vararg

В Scala, мы , возможно , потребуется , чтобы функционировать в качестве переменного числа параметров , определенных форм, в это время можно использовать переменную параметра длину , определенную функцию. 
SUM DEF (в НУМС: Int *) = { 
  вар RES = 0 
  для (NUM < - в Nums) + RES = NUM
   RES 
} 



####### 
Scala > Вставить 
// Вход в режим Вставить (Ctrl-D , чтобы закончить) 

SUM DEF (в НУМС: Int *) = { 
 вар Result = 0 
 для (NUM < - в Nums) { 
  Результат + = NUM
  } 
 Результат 
} 

. // выходящий Paste РЕЖИМА, теперь Устный 

SUM (в Nums: Int *) Int 

Scala > SUM (1,2,3,4,5) 
res44: Int = 15


2, использование переменной длины последовательности вызовов параметров

Если вы хотите иметь в последовательности функции аргументов переменной длины , которая вызывается непосредственно, это неправильно. Так , например Val S = сумма ( от 1 до 5 ). 
Скала случай требует специальных параметров синтаксиса определены как последовательности, так что интерпретатор может идентифицировать Scala. Этот синтаксис очень полезно! Вы должны быть хорошей идеей использовать много искрой к исходному коду. 

Val S = сумма ( от 1 до 5 : _ *) 

Случай: рекурсивная функция используется для накопления 

DEF sum2 (в НУМС: Int *): Int = { 
  ЕСЛИ (nums.length == 0) 0 
  остальное nums.head + SUM2 (в НУМС. хвост: _ *) 
} 



######## 
Scala> Вставить 
// Вход в режим Вставить (Ctrl-D , чтобы закончить) 

DEF SUM (в НУМС: Int *) = { 
 вар Result = 0 
 для (NUM < - в НУМС ) { 
  Результат + = NUM
  } 
 Result 
} 

// выходящий Paste РЕЖИМА, теперь Устный. 

SUM (в Nums: Int *) Int 


Scala > . SUM (1. 5 до: _ *)
res45: Int = 15

 
##
Скала>: наклеить 
// Переход в режим вставки (Ctrl-D , чтобы закончить) 

Защиту sum2 (НУМС: Int *): Int = { 
 если (nums.length == 0) 0 
 еще nums.head + sum2 (nums.tail: _ *) 
} 

// Выход из режима вставки, теперь интерпретации. 

sum2: (НУМС: Int *) Int 

Скала> sum2 (1,2,3,4,5) 
res46: Int = 15


В-четвертых, процесс, ленивые значения и исключения

1, процесс

В Scala определения функции, если функция тела непосредственно обернуты в фигурные скобки, без использования = тип соединения значения , возвращаемого функцией является единицей. Такая функция вызывается для обработки. 
Функция не требует процесса , обычно используемый для возвращаемого значения. 

Существует также процесс написания, это тип возвращаемого значения функции определяются как единица. 

DEF SayHello (имя: String) = "вводное," + имя 
DEF SayHello (имя: String) {Print ( "Hello," + имя); "вводное," + имя} 
DEF SayHello (имя: String): Unit = " привет, "имя + 




###### 
Scala> DEF SayHello (имя: String) {Print (" Hello, "+ имя)," Привет, «имя} + 
SayHello: (имя: String) Единица 

Scala> SayHello ( "LEO") 
Здравствуйте, LEO 


Scala> DEF SayHello (имя: String) = {Print ( "Hello," + имя); "вводное," + имя} 
SayHello: (имя: String) Строка 

Scala> SayHello ( "LEO" ) 
вводная, leores48: String = вводный,


SayHello: (имя: String) Единица


масштаб>


2, ленивое значение

В Scala предоставляет возможности ленивого значения, то есть, если переменная объявлена как ленивое, только при первом использовании переменного, переменный , соответствующая оценке экспрессии будет происходить. 
Эта особенность особенно полезна для вычисления трудоемких операций, таких как открытие файлов Л.О., Л.О. сети , как. 

scala.io.Source._ Импорт 
ленивым Val Lines = FromFile. ( «C: /Users/Administrator/Desktop/test.txt») mkString 

Даже если файл не существует, никакая ошибка не будет, будет жаловаться , когда только первый , используя переменную проверенный ленивый расчет характерного выражения. 

Линии FromFile = Val ( "C: //Users//Administrator/Desktop/test.txt") .mkString 
отложенной Вал линий FromFile = ( "C: //Users/Administrator//Desktop/test.txt") .mkString 
DEF из FromFile = строк. ( "C :. // Пользователи / Администратор / Desktop / TXT Test") mkString 




####### 
Scala> = ленивых Val линии FromFile ( "Home // // test.txt") mkString. 
линии: String = < ленивого > 

Scala> Версия для печати (линия) 
вводное слово


3, аномальное

В Scala, обработка исключений и механизм захвата очень похожи на Java. 

{Попробовать 
  вбрасывание новый новый lllegalArgumentException ( "X не должен быть отрицательным") 
} {подвох 
  Case _: = lllegalArgumentException> Пе ( "lllegal Аргумент!") 
} Окончательно { 
  Print ( "Release Resources!") 



######## #####

рекомендация

отwww.cnblogs.com/weiyiming007/p/10954018.html