Что касается синтаксиса, Scala является одним из многих языков, где вы вызываете функции и методы, передавая аргументы в скобках (в основном, но давайте пока будем простыми):
def myFunction(a: Int): Int = a + 1
myFunction(1) // myFunction is called and returns 2
Кроме того, Scala позволяет указать несколько списков параметров, как в следующем примере:
def myCurriedFunction(a: Int)(b: Int): Int = a + b
myCurriedFunction(2)(3) // myCurriedFunction returns 5
Вы также можете частично применить myCurriedFunction
, но, опять же, давайте пока будем простыми бытия. Основная идея заключается в том, что вы можете иметь несколько списков аргументов, передаваемых в функцию.
На этом основании Scala позволяет определить список неявных параметров, которые компилятор автоматически найдет для вас некоторые правила Неявные параметры используются, например, Future
s:
// this defines how and where callbacks are run
// the compiler will automatically "inject" them for you where needed
implicit val ec: ExecutionContext = concurrent.ExecutionContext.global
Future(4).map(_ + 1) // this will eventually result in a Future(5)
Обратите внимание, что и Future
, и map
имеют второй список параметров, который позволяет указывать неявный контекст выполнения. Имея один в области видимости, компилятор «внедрит» его для вас на сайте вызовов, без необходимости писать это явно. Вы могли бы еще сделать это, и результат был бы
Future(4)(ec).map(_ + 1)(ec)
Тем не менее, я не знаю специфики используемой вами библиотеки, но идея в том, что вам нужно создать экземпляр значения введите Core
и либо привяжите его к implicit val
, либо передайте его явно.
Полученный код будет выглядеть примерно так:
val highs: Vector[Double] = ???
val lows: Vector[Double] = ???
val closes: Vector[Double] = ???
implicit val core: Core = ??? // instantiate core
val resultsFuture = Volatility.ATR(highs, lows, closes) // core is passed implicitly
for (results <- resultsFuture; result <- results) {
println(result)
}
Обратите внимание, что в зависимости от вашей ситуации вы можете также необходимо использовать неявный ExecutionContext
для запуска этого кода (потому что вы извлекаете Vector[Double]
из Future
). Выбор правильного контекста выполнения является другим видом проблемы, но для игры вы можете использовать глобальный контекст выполнения.
Extra
Относительно некоторых из пункты, которые я оставил открытыми, вот некоторые указатели, которые, надеюсь, окажутся полезными: