Если у меня есть следующий код:
val wows = Buffer[Wow]()
def yo(f: _ => Wow) { wows += f }
и я получаю ошибку при попытке добавить f. Интересно, как я могу использовать f внутри тела метода, или, точнее, как я должен ссылаться на него, так как f
или f()
или f(_)
не работают.
UPDATE:
Тип f
нельзя изменить на f: => Wow
, поскольку функции типа _ => Wow
, переданные этому методу, происходят из такого класса:
object Wonderful {
val wows = Buffer[Wow]()
def yo(f: _ => Wow) { wows += f }
}
class Joy[+R](fs: Buffer[_ => R]) {
def exalt() {
fs.map(Wonderful.yo(_))
}
}
и этот буфер не может быть параметризован с помощью => R
, он показывает ошибку.
ОБНОВЛЕНИЕ 2: Вы оба ответили вторым, прежде чем я закончил объяснение второй части! Спасибо! Это скорость!
ОБНОВЛЕНИЕ 3: По сути, я изучаю Scala и пытаюсь опробовать все, что могу придумать. В этом конкретном фрагменте кода происходит следующее: у меня есть 3 основных класса:
- WorldObject - представляет все игровые объекты (имеет x, y и т. Д.).
- Emitter - представляет что-то, что испускает объекты с течением времени (расширяет WorldObject).
- Funset - набор функций, которые должны вызывать WorldObjects при вызове. В будущем я хотел сделать их частично примененными функциями с некоторыми подготовленными аргументами, передаваемыми непосредственно соответствующим фабричным методам.
- Мир - где все происходит.
Суть в том, что коллекция «порождающих» функций Funset может быть отредактирована во время выполнения, поэтому она представлена в виде буфера. В каждом цикле обновления Эмиттер передает каждую из функций Funsets функциям создателя Мира, которые проявляют созданные объекты в мире.
Надеюсь, я объяснил, чтобы это можно было понять ... может быть, немного странно или неправильно, но ... в любом случае, я кое-что узнал о Scala сейчас!