Function 惯用长生不老药-函数参数样式

Function 惯用长生不老药-函数参数样式,function,parameters,elixir,Function,Parameters,Elixir,draw和hand变量是列表。我想把最上面的牌从抽签中移出,然后把它加到手上。这就是功能: def pick_up_card(draw, hand) do [new_card | new_draw ] = draw {hand ++ [new_card], new_draw} end 通过在参数列表中包含[head | tail]部分,我可以将其改写为更短的一行: def pick_up_card([new_card | new_draw], hand) do {hand ++ [

draw和hand变量是列表。我想把最上面的牌从抽签中移出,然后把它加到手上。这就是功能:

def pick_up_card(draw, hand) do
  [new_card | new_draw ] = draw
  {hand ++ [new_card], new_draw}
end
通过在参数列表中包含[head | tail]部分,我可以将其改写为更短的一行:

def pick_up_card([new_card | new_draw], hand) do
  {hand ++ [new_card], new_draw}
end
那会是更地道的长生不老药吗?这会损害可读性吗?我可以想象,如果函数定义具有传入列表的名称,而不是Head | Tail调用,那么代码以后会更容易阅读


这是个人喜好的问题,还是我最好保存那行代码并在函数定义中插入Head | Tail调用?

在我看来,最好将其放在参数列表中。你可能想再写一个条款

def拾取卡([],uu),do:引发“无需拾取”


在不久的将来,不是吗?:)或者关注其他特殊情况-因此最好从一开始就将其放在标题中。

在我看来,最好将其放在参数列表中。你可能想再写一个条款

def拾取卡([],uu),do:引发“无需拾取”


在不久的将来,不是吗?:)或者关注其他特殊情况-因此最好从一开始就将其放在标题中。

在我看来,最好将其放在参数列表中。你可能想再写一个条款

def拾取卡([],uu),do:引发“无需拾取”


在不久的将来,不是吗?:)或者关注其他特殊情况-因此最好从一开始就将其放在标题中。

在我看来,最好将其放在参数列表中。你可能想再写一个条款

def拾取卡([],uu),do:引发“无需拾取”



在不久的将来,不是吗?:)或者注意其他特殊情况-因此最好从一开始就将其放在标题中。

是否需要将
新卡添加到
手的末尾?如果做
{[new_card | hand],new_draw}
的效率不高。两个备选方案产生的代码基本相同,但如果
draw
不是列表,则错误不同。是的,为了实现此功能,我将从draw列表中取出卡片,并将其添加到手牌列表中。(不管它是添加到手牌列表的前面还是后面都不重要。)在现实世界中,我正在拿起一张卡片并将其添加到我的手牌上。如果你不在乎将它添加到手牌列表的哪里,那么罗伯特的建议更好,因为添加到列表顶部是O(1),而添加到尾部是O(n)。谢谢,莎莎。这是关于O(1)的一个很好的观点。基于这一点,我可能重写的不仅仅是这个函数。谢谢您是否需要将
新卡
添加到
手册的末尾
?如果做
{[new_card | hand],new_draw}
的效率不高。两个备选方案产生的代码基本相同,但如果
draw
不是列表,则错误不同。是的,为了实现此功能,我将从draw列表中取出卡片,并将其添加到手牌列表中。(不管它是添加到手牌列表的前面还是后面都不重要。)在现实世界中,我正在拿起一张卡片并将其添加到我的手牌上。如果你不在乎将它添加到手牌列表的哪里,那么罗伯特的建议更好,因为添加到列表顶部是O(1),而添加到尾部是O(n)。谢谢,莎莎。这是关于O(1)的一个很好的观点。基于这一点,我可能重写的不仅仅是这个函数。谢谢您是否需要将
新卡
添加到
手册的末尾
?如果做
{[new_card | hand],new_draw}
的效率不高。两个备选方案产生的代码基本相同,但如果
draw
不是列表,则错误不同。是的,为了实现此功能,我将从draw列表中取出卡片,并将其添加到手牌列表中。(不管它是添加到手牌列表的前面还是后面都不重要。)在现实世界中,我正在拿起一张卡片并将其添加到我的手牌上。如果你不在乎将它添加到手牌列表的哪里,那么罗伯特的建议更好,因为添加到列表顶部是O(1),而添加到尾部是O(n)。谢谢,莎莎。这是关于O(1)的一个很好的观点。基于这一点,我可能重写的不仅仅是这个函数。谢谢您是否需要将
新卡
添加到
手册的末尾
?如果做
{[new_card | hand],new_draw}
的效率不高。两个备选方案产生的代码基本相同,但如果
draw
不是列表,则错误不同。是的,为了实现此功能,我将从draw列表中取出卡片,并将其添加到手牌列表中。(不管它是添加到手牌列表的前面还是后面都不重要。)在现实世界中,我正在拿起一张卡片并将其添加到我的手牌上。如果你不在乎将它添加到手牌列表的哪里,那么罗伯特的建议更好,因为添加到列表顶部是O(1),而添加到尾部是O(n)。谢谢,莎莎。这是关于O(1)的一个很好的观点。基于这一点,我可能重写的不仅仅是这个函数。谢谢检查空列表发生在我在示例中的步骤之前的步骤中。如果抽签堆栈中没有任何内容,那么游戏实际上已经结束,程序将朝着不同的方向运行。因此,两个选项实际上是相同的,您可能会看到第二个示例更加频繁。谢谢,Jose。因此,这是最有意义的。检查空列表发生在我在示例中的步骤之前的步骤中。如果抽签堆栈中没有任何内容,那么游戏实际上已经结束,程序将朝着不同的方向运行。因此,两个选项实际上是相同的,您可能会看到第二个示例更加频繁。谢谢,Jose。因此,这是最有意义的。空列表的检查发生在st