带有绑定变量的字符串截断匹配表达式

发布于 2024-09-24 06:02:53 字数 333 浏览 2 评论 0原文

以下 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) 中显示的语法?

谢谢!

The following shell sessions shows some behavior I would like to understand:

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

Surely statements 2 and 5 are syntacticially identical? I would like to use this idiom to extract some text from a string, where B is being read in from a configuration file. Is this possible, and what syntax should I use instead of that shown in 5) above?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜灵血窟げ 2024-10-01 06:02:54

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.

The LHS ++ RHS pattern is expanded at compiletime to [ lhs0, lhs1, lhs2 | RHS] (where LHS =:= [lhs0, lhs1, lhs2], and the compiler refuses to do this for anything but literal strings/lists. In theory it could do this for variables, but it simply doesn't right now.

I think in your case you need to do:

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.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文