在Erlang中,当你有一个可打印字符列表时,它是一个字符串,但字符串也是一个项目列表,列表的所有功能都可以应用到字符串上。理想情况下,数据结构:字符串在erlang中不存在。
我的部分代码需要确保某些东西不仅是一个列表,而且是一个字符串。 (一个真正的字符串)。它需要分开列表,例如 [1,2,3,a,b,"josh"]
,来自字符串,例如"Muzaaya"
。对于字符串和列表,保护表达式is_list/1
将说true
。没有像 这样的后卫,所以这意味着我需要一个代码片段来确保我的数据是一个字符串。在这种情况下,字符串是仅可打印的列表(字母,两种情况,上部和下部),并且可以包含数字,例如is_string/1
"Muzaaya2536 618 Joshua"
。我需要一个代码片段(Erlang)来检查我并确保变量是一个字符串,而不仅仅是一个列表。感谢
答案 0 :(得分:24)
模块io_lib
中有两个功能可以提供帮助:io_lib:printable_list/1
和io_lib:printable_unicode_list/1
测试参数是否为可打印的 latin1 列表或分别为 unicode 字符。
答案 1 :(得分:6)
使用isprint(3)定义可打印字符 -
isprint(X) when X >= 32, X < 127 -> true;
isprint(_) -> false.
is_string(List) when is_list(List) -> lists:all(fun isprint/1, List);
is_string(_) -> false.
但是,你将无法用它作为后卫。