Индекс подстроки в качестве функции защиты - PullRequest
0 голосов
/ 11 мая 2018

Я реализую функцию, и мне нужно знать, содержит ли строка подстроку в качестве защиты.Я пробовал следующее:

myFunc(Number, String) when N rem 2 == 0, string:str(String, "pattern") == 0 - > do thing....

С этой структурой я получаю недопустимое выражение охранника, но я не понимаю, почему происходит это

1 Ответ

0 голосов
/ 11 мая 2018

У меня нелегальное охранное выражение '

В erlang вы не можете вызывать какую-либо функцию в охране, например, строка: ул (). Erlang разрешает использовать только очень ограниченный набор вызовов функций для защиты. См. Раздел 8.25 Защитные последовательности .

Однако вы можете использовать оператор case внутри тела функции для выполнения вызова функции, который недопустим в Guard, а затем проверить возвращаемое значение:

-module(my).
-compile(export_all).

func(N, Str, Pattern) when N rem 2 == 0 ->
    case string:str(Str, Pattern) of
        0       -> io:format("The string '~s' does not contain the pattern '~s'.~n", 
                             [Str, Pattern]);
        Index   -> io:format("'~s' contains the pattern '~s' at index ~w.~n", 
                             [Str, Pattern, Index])
    end.

В оболочке:

29> c(my).                            
my.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,my}

30> my:func(4, "HelloWorld", "cat").
The string 'HelloWorld' does not contain the pattern 'cat'.
ok

31> my:func(4, "HelloWorld", "World").
'HelloWorld' contains the pattern 'World' at index 6.
ok
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...