2013-05-15 2 views
1

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

def capitalizeAll(args: String*) = { 
    args.map { args => args.capitalize } 
} 

Однако я задавался вопрос, как функция может быть использована вместо «арга = > args.capitalize»

, например (не работает):

def func(s: String): String = { s.capitalize } 
def capitalizeAll2(args: String*) = { 
    args.map { func(args) } 
} 

, как я могу сделать эту работу? Приветствие

ответ

3

Там нет магии:

def func(s: String): String = { s.capitalize } 
def capitalizeAll2(args: String*) = { 
    args.map { arg => func(arg) } 
} 

Здесь я дал arg имени в настоящее время обрабатываются строки (из всех args строк). Ваш первый пример работает только из-за теневого копирования (все строки: args, а текущая строка имеет одно и то же имя, которое просто тени оригинально).

Почти нет магии ...

def capitalizeAll3(args: String*) = { 
    args.map(func) 
} 

Последний пример использует синтаксис сахара применять функцию только один параметр в аргументах.

+0

Возможно, вы также должны упомянуть 'args.map (_. Capizeize)' - возможно, это то, что он на самом деле хочет (просто дикое предположение). – scriptin