String 带绑定变量的字符串匹配表达式
以下shell会话显示了我希望了解的一些行为:String 带绑定变量的字符串匹配表达式,string,erlang,pattern-matching,design-patterns,String,Erlang,Pattern Matching,Design Patterns,以下shell会话显示了我希望了解的一些行为: 1> A = "Some text". "Some text" 2> "Some " ++ R = A. "Some text" 3> R. "text" 4> B = "Some ". "Some " 5> B ++ L = A. * 1: illegal pattern 语句2和语句5在语法上是否完全相同?我想用这个习惯用法从字符串中提取一些文本,其中B是从配置文件中读取的。这可能吗?我应该使用什么语法来代替上面
1> A = "Some text".
"Some text"
2> "Some " ++ R = A.
"Some text"
3> R.
"text"
4> B = "Some ".
"Some "
5> B ++ L = A.
* 1: illegal pattern
语句2和语句5在语法上是否完全相同?我想用这个习惯用法从字符串中提取一些文本,其中B
是从配置文件中读取的。这可能吗?我应该使用什么语法来代替上面5)中所示的语法
谢谢 编译时,将
LHS++RHS
模式扩展为[lhs0,lhs1,lhs2 | RHS]
(其中LHS=:=[lhs0,lhs1,lhs2]
,编译器拒绝对文本字符串/列表以外的任何对象执行此操作。理论上,它可以对变量执行此操作,但目前还不能
我认为在你的情况下,你需要做:
Prefix = read_from_config(),
TestString = "Some test string",
case lists:prefix(Prefix, TestString) of
true ->
%% remove prefix from target string
lists:nthtail(length(Prefix), TestString);
false ->
different_prefix
end.
啊,语法糖的乐趣!谢谢。编译器不能在编译时扩展变量,因为它不知道如何扩展它们。你可以想象通过扩展到一个运行时来实现这种情况,并行遍历两个列表,当匹配的LHS用完时返回RHS tail,否则不匹配类型的操作。@Archelus打开一个功能请求时间?我很想备份它,并在运行时帮助获得此行为!