2015-03-15 5 views
1

У меня есть переменная param, которая должна быть инициализирована во время выполнения.Идиоматический способ проверки инициализации параметра

Тогда у меня есть часть кода, который реализует следующие:

if (param has been initialized) 
    ...do something... 
else 
    print error and exit 

Что такое наиболее идиоматических способ сделать это в Scala?

До сих пор я использовал Option[X] таким образом:

var param : Option[TheType] = None 
... 
val param_value : TheType = x getOrElse {println("Error"); null} 

Но, так как я должен вернуться null, кажется грязным.

Как мне это сделать?

+0

Не могли бы вы предоставить больше контекста? Это параметр метода? Если вы не указали ошибку, почему бы не начать ее с самого начала? – johanandren

+0

Возможный дубликат [Как проверить значение null в одном выражении в scala?] (Http://stackoverflow.com/questions/5740906/how-to-check-for-null-in-a-single-statement-in -scala) –

ответ

4

Просто map или foreach над ним:

param.foreach { param_value => 
    // Do everything you need to do with `param_value` here 
} getOrElse sys.exit(3) # Param was empty, kill the program 

Вы также можете использовать стиль for Понимание:

for { 
    param_value <- param 
} yield yourOperation(param_value) 

Плюсом является то, что если ваш код вызова ожидает что-то делать с param_value в качестве возвращаемого значения от вы будете кодировать возможность param_value, не имеющуюся в вашем обратном типе (это будет., а не потенциально nullTheType)

2

Я мог бы меня неправильно, но мне кажется, что использование Future будет соответствовать с вашей проблемой: Вместо того, чтобы явно проверить, требуется ли ваш param_value инициализирован и закончить программу, если не , вы могли бы сделать свой код, зависящий от ресурса, выполняться, когда ресурс был правильно инициализирован:

val param: Future[TheType] = future { 
     INITIALIZATION CODE HERE 
} 

param onFailure { 
    case e => println("Error!"); 
} 

param onSuccess { 
    case param_value: TheType => { 
     YOUR BUSINESS CODE HERE 
    } 
} 
Смежные вопросы