1

Иногда я сталкиваюсь с одним аргументом, желающим ссылаться на другой. Например,Один аргумент, ссылающийся на другой в списке аргументов

def monitor(time: Double, f: Double => Double, resolution: Double = time/10) = {...} 

Обратите внимание, что разрешение относится к времени. Есть ли там языки, где это возможно? Возможно ли это в Scala?

+1

Невозможно в Scala как написано, но вы можете добавить версию функции с двумя аргументами, которая просто вызывает версию с 3 аргументами. – AmigoNico

ответ

2

Я не знаю никаких языков, где эта конструкция возможна, но простого обходного пути найти не сложно.

В Скале, что-то, как это возможно:

scala> def f(i : Int, j : Option[Int] = None) : Int = { 
    | val k = j.getOrElse(i * 2) 
    | i + k 
    | } 
f: (i: Int, j: Option[Int])Int 

scala> f(1) 
res0: Int = 3 

scala> f(1, Some(2)) 
res1: Int = 3 

В Скале, вы также можете сделать что-то вроде этого:

scala> def g(i : Int)(j : Int = i * 2) = i + j 
g: (i: Int)(j: Int)Int 

scala> g(2)(5) 
res6: Int = 7 

scala> g(2)() 
res7: Int = 6 
3

Это несколько возможно в Scala, но вы должны Карри параметры:

def monitor(time: Double, f: Double => Double)(resolution: Double = time/10) 

Вы не можете сделать это так, как задан вопрос.

Смежные вопросы