Имеет ли Scala какой-либо эквивалент typeof
расширения GCC ?(Или C ++ decltype
?)
Я генерирую код, который ссылается на некоторый внешний код (который может быть еще недоступен), и мне нужен способ ссылки на тип этого кода в определении метода
Для одноэлементных объектов я мог бы использовать Foo.type
, но если Foo
- произвольное выражение, это не работает.
Обновление:
Вот упрощенный пример, который показывает проблему:
def f(x: typeof(Foo))(implicit M: Monoid[typeof(Foo)]) =
M.append(Foo, M.append(x, Foo))
Код, над которым я работаю, ничего не знает о Foo
, кроме того, что это строковое представление выражения Scala.Он выводит приведенный выше код в файл .scala
, который впоследствии будет скомпилирован как часть отдельного проекта.
Конечно, биты typeof(Foo)
не работают.Использование Foo.type
сработает только в том случае, если Foo
будет синглтоном.
По сути, я хочу знать, есть ли что-то, что я мог бы заменить вместо typeof(Foo)
, которое будет работать для произвольных выражений Scala.