当使用=
操作员,正在使用的匹配操作者,其执行模式匹配而不是分配。
的=
运营商的工作方式是这样的:
pattern = expression
在运行时,左侧匹配到右侧。所以,左侧被称为模式,而右侧是药剂期限表达。
即使我不能够抛出一个什么样的模式是一个正式的定义,我可以告诉你,这是不一样的一个表达。由于错误状态,illegal pattern
错误状态,模式可以有更多的限制。
通常,模式可以使用编译时结构,但没有运行时值。 您可以使用基本类型构造函数,如元组(嵌套或非嵌套),列表,地图或甚至常量模式。
例如,这些都是有效的模式,给出的变量绑定:
{:ok, content}
[head | tail]
1
x
{:ok, { day, month, year }, { hour, minute, second} }
然而,以下是运行时表达式是不合法的模式:
1 == 1
a + b
true != false
a == b
你可以在右侧使用这种表达方式,没有问题,但不在左侧。
对此的一个例外是++
和<>
运营商,因为它们会自动转换为构造样式(例如"hello" <> "world"
相同<<"hello", "world">>
)
也是如此在二郎山。在'erl'中执行'1 == 1 = 1.'会导致非法模式错误。 '1 ==(1 = 1)'起作用。 – Gazler
是的。我试过的是((a == b)= c)'而不是'(a ==(b = c))',它会返回false。 – Bala
@Gazler:根据你的评论,我正在做'1 == 1 = true'而不是'1 == 1 = 1' – Bala