Scala - используйте переданную функцию с параметром _

Если у меня есть следующий код:

val wows = Buffer[Wow]()

def yo(f: _ => Wow) { wows += f }

, и я получаю сообщение об ошибке при попытке добавить f. Интересно, как я могу использовать f внутри тела метода, или, точнее, как я должен ссылаться на него, поскольку f или f () или f (_) не работают.

ОБНОВЛЕНИЕ:

Тип f не может быть изменен на f: => Вау , потому что функции типа _ => 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 и т. Д.).
  • Эмиттер - представляет что-то, что испускает объекты во времени (расширяет WorldObject).
  • Funset - набор функций, которые должны создавать WorldObject при вызове. В будущем я хотел сделать их частично прикладными функциями с некоторыми заранее подготовленными аргументами, передаваемыми непосредственно в соответствующие фабричные методы.
  • Мир - где все происходит.

Суть в том, что набор «порождающих» функций Funset можно редактировать во время выполнения, поэтому он представлен в виде буфера. В каждом цикле обновления Emitter передает каждую из функций Funsets функциям-создателям World, которые проявляют сгенерированные объекты в мире.

Надеюсь, я объяснил, чтобы это можно было понять ... может быть, это немного странно или неправильная архитектура, но ... в любом случае, теперь я кое-что узнал о Scala!

0
задан noncom 16 February 2012 в 20:09
поделиться