2010-11-10 83 views
4

我今天早上开始尝试计算erlang中'when'语句的用法。我知道下面的例子是错误的:`当'erlang中的保留字

do_larger() -> 
    io:format("Larger~n"). 

do_smaller() -> 
    io:format("Smaller~n"). 


when_version(Size) -> 
    when Size > 10 -> do_larger(), 
    when Size < 10 -> do_smaller(). 

我决定看看它在Haskell的实现,看看这是否会帮助我最终得到更加混乱。

是否有人能够指出我的教程(或向我解释)when语句的用法以及它在haskell和/或erlang中的用法?

+0

我不太了解Haskell,但是当Haskell和Erlang与我在Haskell中看到的答案完全不同时。 – 2010-11-10 11:04:18

+2

我删除了Haskell标签,因为这与Haskell无关。你可以用几乎任何语言编写一个名为“when”的函数。 – jrockway 2010-11-10 15:27:09

+0

可能要考虑将问题重命名为“当Erlang中的保留字”或“Erlang中的when关键字”时。 Erlang没有声明。 #Pedantic – 2016-03-01 05:20:25

回答

16

在erlang的时候是一个子句的守卫。这涉及到erlang中内置的模式匹配。你的榜样必须是:

when_version(Size) when Size > 10 -> 
    do_larger(); 
when_version(Size) when Size < 10 -> 
    do_smaller(). 

Guard SequencesFunction Declaration Syntax的参考。

对于一个教程阅读Guards, Guards!Learn You Some Erlang for Great Good这是一个很好的在线Erlang教程BTW。

+3

警卫也可以用于案件和接收陈述。 – Zed 2010-11-10 11:35:16

+0

当在功能中作为守卫或用例时使用。 – 2010-11-15 15:41:13