2016-01-05 3 views
2

В Elixir я хотел бы сопоставить шаблон для наличия поля в структуре - либо там, где поле не равно ни, ни даже лучше, где это строка.Как сопоставить шаблон для «любой строки»?

Я знаю, как шаблон соответствует структуре, где поле равно нулю. Например:

def run(%Query{expression: nil}) 

Как я могу сопоставить структуры, в которых данное поле является любой строкой?

ответ

6

Вы можете сопрягать с:

Kernel.match?("" <> rest , "") 
#true 

def run(%Query{expression: "" <> expression}) 

Или вы можете использовать охранника для этого:

Kernel.match?(foo when is_binary(foo), nil) 
#false 

def run(%Query{expression: expression}) when is_binary(expression) 

Список действительных пунктов охраны доступен по адресу: http://elixir-lang.org/getting-started/case-cond-and-if.html#expressions-in-guard-clauses

+0

Ах, правильно! Благодаря! : D –

+0

Я обновил и решение, и решение для защиты. – Gazler

+0

О, очень интересно. «Если конкатенация пустой строкой соответствует исходному значению, это должна быть строка», правильно? –

Смежные вопросы