【问题标题】:Erlang code explainedErlang代码解释
【发布时间】:2012-05-22 22:33:44
【问题描述】:

我很难理解以下 erlang 代码

-module(threesix).  
-export([quicksort/1]).  

quicksort(Pivot, Left, Right, []=_Src) ->  
     {Left, Pivot, Right};  
quicksort(Pivot, Left, Right, [H|T]=_Src) when H < Pivot ->  
     quicksort(Pivot, [H|Left], Right, T);  
quicksort(Pivot, Left, Right, [H|T]=_Src) ->  
     quicksort(Pivot, Left, [H|Right], T).  

quicksort([]) ->  
     [];  
quicksort([H|T]=_List) ->  
     {Left, Pivot, Right} = quicksort(H, [], [], T),  
     quicksort(Left) ++ [Pivot] ++ quicksort(Right). 

我具体说的是参数中_Src和_List的使用。

这些只是为了文档,因为我看不出为什么要使用它们吗?

【问题讨论】:

  • 正如 sepp2k 所说,它们没有被使用,这些是匿名(无关)变量,因此您可以省略它们。
  • @Yasir,这并不完全正确,变量名开头的 _ 只是告诉编译器禁止该变量的未使用变量警告。它仍然是一个常规变量并且可以使用,但可能不应该使用,除非 _ 被删除。如果您真的不关心它们并且永远不会使用它们,那么只需使用 _ 。最近在邮件列表中有一个非常有趣的主题 [thread.gmane.org/gmane.comp.lang.erlang.general/43491/…
  • 重要的是要区分变量_ 哪个 无关变量和以_ 开头的变量实际上是正常变量并且可以被这样使用。如果不使用它们,编译器不会发出警告,有些人使用它们来“注释”他们的代码。正如@fuzzy 给出的链接所示,我不喜欢这样,也从不使用它们。

标签: erlang


【解决方案1】:

是的,它们仅用于文档。它们实际上并未被使用(如前导下划线所示)。

【讨论】:

  • 实际上没有什么可以强制它们“没有实际使用”,_只是告诉编译器不要抱怨它们没有被使用。
  • @fuzzylollipop:没错,但是把 _ 放在那里你基本上是在说“我不打算使用这个变量 - 我只是为了清楚起见而命名它”
猜你喜欢
  • 1970-01-01
  • 2015-02-25
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 2012-07-20
  • 2010-10-11
相关资源
最近更新 更多