字符串chomping匹配表达式与绑定变量

时间:2010-09-16 20:58:38

标签: 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。这是可能的,我应该使用什么语法而不是上面5)中显示的语法?

谢谢!

1 个答案:

答案 0 :(得分:4)

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.