Elixir-sigils
エリクサー-シギル
この章では、シギル、つまりテキスト表現を操作するために言語が提供するメカニズムについて説明します。 印章は、チルダ(〜)文字で始まり、その後に文字(印章を識別する)と区切り文字が続きます。オプションで、最後の区切り文字の後に修飾子を追加できます。
正規表現
Elixirの正規表現はシギルです。 Stringの章でそれらの使用を見てきました。 もう一度例を挙げて、Elixirで正規表現を使用する方法を見てみましょう。
# A regular expression that matches strings which contain "foo" or
# "bar":
regex = ~r/foo|bar/
IO.puts("foo" =~ regex)
IO.puts("baz" =~ regex)
上記のプログラムが実行されると、次の結果が生成されます-
true
false
Sigilsは8つの異なる区切り文字をサポートしています-
~r/hello/
~r|hello|
~r"hello"
~r'hello'
~r(hello)
~r[hello]
~r{hello}
~r<hello>
異なる区切り文字をサポートする理由は、異なる区切り文字が異なるシギルにより適している可能性があるためです。 たとえば、正規表現に括弧を使用すると、正規表現内の括弧と混同される可能性があるため、混乱を招く選択になる場合があります。 ただし、次のセクションで説明するように、括弧は他のシギルに便利です。
ElixirはPerl互換の正規表現をサポートし、修飾子もサポートします。 正規表現の使用の詳細については、https://www.finddevguides.com/perl/perl_regular_expressions [こちら]を参照してください。
文字列、文字リスト、および単語リスト
正規表現以外に、Elixirには3つの組み込みシギルがあります。 シギルを見てみましょう。
文字列
〜s sigilは、二重引用符のように文字列を生成するために使用されます。 〜s sigilは、たとえば、文字列に二重引用符と単一引用符の両方が含まれる場合に便利です-
new_string = ~s(this is a string with "double" quotes, not 'single' ones)
IO.puts(new_string)
このシギルは文字列を生成します。 上記のプログラムが実行されると、次の結果が生成されます-
"this is a string with \"double\" quotes, not 'single' ones"
文字リスト
〜c sigilは、文字リストを生成するために使用されます-
new_char_list = ~c(this is a char list containing 'single quotes')
IO.puts(new_char_list)
上記のプログラムが実行されると、次の結果が生成されます-
this is a char list containing 'single quotes'
単語リスト
〜w印は、単語のリストを生成するために使用されます(単語は単なる通常の文字列です)。 〜w印の内部では、単語は空白で区切られています。
new_word_list = ~w(foo bar bat)
IO.puts(new_word_list)
上記のプログラムが実行されると、次の結果が生成されます-
foobarbat
〜w sigilは、結果リストの要素のデータ型を指定する c、s 、および a 修飾子(それぞれ文字リスト、文字列、アトム用)も受け入れます-
new_atom_list = ~w(foo bar bat)a
IO.puts(new_atom_list)
上記のプログラムが実行されると、次の結果が生成されます-
[:foo, :bar, :bat]
Sigilsでの補間とエスケープ
小文字のシギルに加えて、Elixirは大文字のシギルをサポートして、文字のエスケープと補間を処理します。 〜sと〜Sは両方とも文字列を返しますが、前者はエスケープコードと補間を許可しますが、後者は許可しません。 これを理解するための例を考えてみましょう-
~s(String with escape codes \x26 #{"inter" <> "polation"})
# "String with escape codes & interpolation"
~S(String without escape codes \x26 without #{interpolation})
# "String without escape codes \\x26 without \#{interpolation}"
カスタム印章
独自のカスタムシギルを簡単に作成できます。 この例では、文字列を大文字に変換するシギルを作成します。
defmodule CustomSigil do
def sigil_u(string, []), do: String.upcase(string)
end
import CustomSigil
IO.puts(~u/tutorials point/)
上記のコードを実行すると、次の結果が生成されます-
TUTORIALS POINT
最初にCustomSigilというモジュールを定義し、そのモジュール内でsigil_uという関数を作成しました。 既存のシギル空間には既存の〜uシギルがないため、これを使用します。 _uは、チルダの後の文字としてuを使用することを示します。 関数定義は、入力とリストの2つの引数をとる必要があります。