等效地,如何为“单个”UTF8 字符指定类型?
在类型定义中,我可以使用通用的“任何字符串”或“任何 utf8 字符串”
@type tile :: String.t # matches any string
@type tile :: <<_::8>> # matches any single byte
但似乎我无法匹配第一位为 0
@type tile :: <<0::1, _::7>>
单个 UTF 位序列的情况是
@type tile :: <<0::1, _::7>> |
<<6::3, _::5, 2::2, _::6>> |
<<14::4, _::4, 2::2, _::6, 2::2, _::6>> |
<<30::5, _::3, 2::2, _::6, 2::2, _::6, 2::2, _::6>>
(例如,这些位模式在使用模式匹配时匹配
<<14::4, _::4, 2::2, _::6, 2::2, _::6>> = "○"
成功。)
但是当在 typespecs 中使用时,编译器会抱怨很多
== Compilation error in file lib/board.ex ==
** (ArgumentError) argument error
(elixir) lib/kernel/typespec.ex:1000: Kernel.Typespec.typespec/3
(elixir) lib/kernel/typespec.ex:1127: anonymous fn/4 in Kernel.Typespec.typespec/3
(elixir) lib/enum.ex:1899: Enum."-reduce/3-lists^foldl/2-0-"/3
(elixir) lib/kernel/typespec.ex:1127: Kernel.Typespec.typespec/3
(elixir) lib/kernel/typespec.ex:828: anonymous fn/4 in Kernel.Typespec.typespec/3
(elixir) lib/enum.ex:1899: Enum."-reduce/3-lists^foldl/2-0-"/3
(elixir) lib/kernel/typespec.ex:828: Kernel.Typespec.typespec/3
(elixir) lib/kernel/typespec.ex:470: Kernel.Typespec.translate_type/3
有没有办法对这样的位模式进行类型规范?