# [Ride v5] Any
⚠️ Это документация Стандартной библиотеки версии 5. Рекомендуем использовать версию 6. Перейти к версии 6
Any
— произвольный тип данных. Он является общим надтипом всех типов: значение типа Any может быть строкой, числом, unit
, структурой, списком, кортежем и т. п.
# as, exactAs
Если конкретный тип значения известен заранее, привести значение к этому типу можно с помощью макросов:
as[T]
— возвращает значение типаT
, а если значение не соответствует типу, возвращаетunit
.exactAs[T]
— возвращает значение типаT
, а если значение не соответствует типу, завершается ошибкой.
⚠️ Do not pass a tuple longer than 9 elements or a Union type as an argument.
Примеры:
Значение — базовый тип:
func f1(a: Any) = a.as[Int] f1(10).value() + 1 # Возвращает 11 f1("Waves").isDefined() # Возвращает false
Значение является кортежем:
func f2(a: Any) = a.exactAs[(Int,String)] f2((11,"Ride"))._2 + " the Waves!" # Возвращает "Ride the Waves!" f2(true) # Завершается ошибкой
Значение является списком:
func f3(a: Any) = a.exactAs[List[Any]] f3([12,"Ride"])[0].exactAs[Int] # Возвращает 12 f3(88) # Завершается ошибкой
# match ... case
Если конкретный тип значения из Any
заранее неизвестен, определить его можно с помощью оператора match-case.
⚠️ Не используйте match-case
с кортежами длиной более 9.
Пример:
func findString(a: Any) = {
match a {
case a: String => a
case a: List[Any] =>
match a[0] {
case b: String => b
case _ => throw("Data is not a string")
}
case _ => throw("Data is not a string")
}
}