Передача аргументов DEFAULTS в функцию scala - PullRequest
0 голосов
/ 11 мая 2018

enter image description here

Я пытаюсь передать аргументы по умолчанию в функцию, как мы можем сделать в методе ... Но я получаю ошибку. Можно ли передать аргументы по умолчанию / именованные аргументы в функцию, подобную методу? Можно ли передать именованные аргументы в функцию при ее вызове?

Ответы [ 4 ]

0 голосов
/ 11 мая 2018

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

class my
{
    def f(i:Int = 2, j: Int) = i + j
}

var my = new my()

my.f(j = 1)        // i = 2, j = 1
my.f(i = 3, j = 1) // i = 3, j = 1
my.f(3, 1)         // i = 3, j = 1
0 голосов
/ 11 мая 2018
var f(i:Int=2,j:Int) => i + j

Это не работает.Если вы хотите определить лямбду, попробуйте это

val f = (i:Int,j:Int) => i + j

Это правильный подход.Также вы не можете назначить значения по умолчанию в лямбде.Вы должны определить методы с ключевым словом def.Попробуйте это:

def f(i:Int, j:Int=2) = i + j

Параметр со значением по умолчанию должен быть последним параметром, потому что компилятор scala будет сканировать значения слева направо.Он будет использовать значения по умолчанию, только если они отсутствуют.В приведенном выше коде f(1) будет выдавать 3, потому что j будет использовать 2 в качестве значения по умолчанию.Поэтому используйте обязательные аргументы слева и аргументы со значениями по умолчанию справа.Надеюсь, это поможет

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

0 голосов
/ 11 мая 2018

Вы можете использовать функцию карри здесь

def sum1(a:Int=2)(b:Int) = a+b

sum1(33)

Надеюсь, что это отвечает на ваш вопрос.

0 голосов
/ 11 мая 2018

Это работает только для методов (которые определены с def).

def func(i: Int = 2) = i

Однако, здесь является чем-то вроде "хака", чтобы сделать это независимо от того.

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