Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compilation 编译错误,Elixir中未定义函数_Compilation_Elixir - Fatal编程技术网

Compilation 编译错误,Elixir中未定义函数

Compilation 编译错误,Elixir中未定义函数,compilation,elixir,Compilation,Elixir,我正在用长生不老药做一个扑克手分析仪。在决定谁的牌更好之前,该程序接受52个整数的输入,并将5张奇数索引卡分发给玩家1,将5张偶数索引卡分发给玩家2。我为下面的每个玩家制作了一个函数。当我尝试编译时,编译器抛出一个错误:compileErrorPoker.ex:49:undefined function player1/1。我尝试了很多东西,但都失败了,请帮忙 defmodule Poker do decks = %{ 1 => "2C", 2 => "3C", 3 =>

我正在用长生不老药做一个扑克手分析仪。在决定谁的牌更好之前,该程序接受52个整数的输入,并将5张奇数索引卡分发给玩家1,将5张偶数索引卡分发给玩家2。我为下面的每个玩家制作了一个函数。当我尝试编译时,编译器抛出一个错误:compileErrorPoker.ex:49:undefined function player1/1。我尝试了很多东西,但都失败了,请帮忙

defmodule Poker do

  decks = %{ 1 => "2C", 2 => "3C", 3 => "4C", 4 => "5C", 5 => "6C", 6 => "7C", 7 => "8C",
    8=> "9C", 9=> "10C", 10 => "11C", 11 => "12C", 12 => "13C", 13 => "1C", 14 => "2D",
    15 => "3D", 16=> "4D", 17 => "5D", 18=> "6D", 19=> "7D", 20=> "8D", 21=> "9D",
    22=> "10D", 23=> "11D", 24=> "12D", 25=> "13D", 26=> "1D", 27=> "2H", 28=> "3H",
    29=> "4H", 30=> "5H", 31=> "6H", 32=> "7H", 33=> "8H", 34=> "9H", 35=> "10H",
    36=> "11H", 37=> "12H", 38=> "13H", 39=> "1H", 40=> "2S", 41=> "3S", 42=> "4S",
    43=> "5S", 44=> "6S", 45=> "7S", 46=> "8S", 47=> "9S", 48=> "10S", 49=> "11S",
    50=> "12S", 51=> "13S", 52=> "1S"}
  defp player1(cards), do: Enum.take(Enum.drop_every(cards, 2), 5)

  defp player2(cards) do
    Enum.take(
      cards -- (Enum.drop_every(cards, 2)) ,5)
  end
  mapHand = for n <- player1(cards), do: Map.get(decks, n)
end

我做错了什么?

您的代码有一些问题。解决方案主要取决于你想做什么。这将有助于您更好地了解Elixir中的范围规则

在您的案例中,我建议的最简单的解决方案是替换所有匹配项,例如,对于n2 c,2=>3C,3=>4C,4=>5C,5=>6C,6=>7C,7=>8C, 8=>9C,9=>10C,10=>11C,11=>12C,12=>13C,13=>1C,14=>2D, 15=>3D,16=>4D,17=>5D,18=>6D,19=>7D,20=>8D,21=>9D, 22=>10D,23=>11D,24=>12D,25=>13D,26=>1D,27=>2H,28=>3H, 29=>4小时,30=>5小时,31=>6小时,32=>7小时,33=>8小时,34=>9小时,35=>10小时, 36=>11小时,37=>12小时,38=>13小时,39=>1小时,40=>2秒,41=>3秒,42=>4秒, 43=>5S,44=>6S,45=>7S,46=>8S,47=>9S,48=>10S,49=>11S, 50=>12S,51=>13S,52=>1S} 终止 defpplayer1cards,do:Enum.takeEnum.drop_everycards,2,5 德福牌球员2号 Enum.takecards-Enum.drop_everycards,2,5 终止 def map_手卡可以吗
对于n来说,您的代码存在一些问题。解决方案主要取决于你想做什么。这将有助于您更好地了解Elixir中的范围规则

在您的案例中,我建议的最简单的解决方案是替换所有匹配项,例如,对于n2 c,2=>3C,3=>4C,4=>5C,5=>6C,6=>7C,7=>8C, 8=>9C,9=>10C,10=>11C,11=>12C,12=>13C,13=>1C,14=>2D, 15=>3D,16=>4D,17=>5D,18=>6D,19=>7D,20=>8D,21=>9D, 22=>10D,23=>11D,24=>12D,25=>13D,26=>1D,27=>2H,28=>3H, 29=>4小时,30=>5小时,31=>6小时,32=>7小时,33=>8小时,34=>9小时,35=>10小时, 36=>11小时,37=>12小时,38=>13小时,39=>1小时,40=>2秒,41=>3秒,42=>4秒, 43=>5S,44=>6S,45=>7S,46=>8S,47=>9S,48=>10S,49=>11S, 50=>12S,51=>13S,52=>1S} 终止 defpplayer1cards,do:Enum.takeEnum.drop_everycards,2,5 德福牌球员2号 Enum.takecards-Enum.drop_everycards,2,5 终止 def map_手卡可以吗
对于n,你能提供更多的细节吗?这些函数是否在模块内?如果是这样的话,是不是地图手=代表n。。。匹配也发生在同一模块内?是的,所有匹配都发生在同一模块内。defmodule Poker doBut mapHand不在任何函数或类似的函数中?那么deck是从哪里来的呢?我只是把所有的代码放进去让它更有意义。如果我把mapHand放在player1函数中,编译器会抱怨未定义的函数deck。你能提供更多的细节吗?这些函数是否在模块内?如果是这样的话,是不是地图手=代表n。。。匹配也发生在同一模块内?是的,所有匹配都发生在同一模块内。defmodule Poker doBut mapHand不在任何函数或类似的函数中?那么deck从何而来呢?我只是把所有的代码放进去让它更有意义。如果我把mapHand放在player1函数中,编译器会抱怨函数deck未定义。总体目标是调用一个名为deal的函数来处理52个整数。比如,扑克。发牌[1,2,3,4,5,6,7,8,9,10……52]并展示获胜的牌。Player1是[2,4,6,8,10],player2是[1,3,5,7,9]。我的问题是,一个函数如何导致另一个函数。一个函数是否可以调用另一个函数,直到显示获胜的手?有没有一种方法可以将player1卡存储在我可以反复调用的变量中?当然可以。本模块可能是您的起点。然后你可以有另一个模块游戏或类似的东西,它调用扑克的功能。或者您可以简单地在这个模块中添加函数deal,它定义了玩家的初始卡片,然后使用map_手牌、牌组等等执行它需要的任何操作。您需要考虑您的代码需要做什么,并定义一种流。使用defp定义的函数只能在同一模块中使用。可以从其他模块调用使用def定义的模块非常感谢您的帮助,非常感谢@maulajutt如果答案有帮助,你应该在分数的正下方用绿色复选标记将其标记为正确
.完成!感谢您让我了解Aleksei。总体目标是调用名为deal with 52 int的函数。比如,扑克。发牌[1,2,3,4,5,6,7,8,9,10……52]并展示获胜的牌。Player1是[2,4,6,8,10],player2是[1,3,5,7,9]。我的问题是,一个函数如何导致另一个函数。一个函数是否可以调用另一个函数,直到显示获胜的手?有没有一种方法可以将player1卡存储在我可以反复调用的变量中?当然可以。本模块可能是您的起点。然后你可以有另一个模块游戏或类似的东西,它调用扑克的功能。或者您可以简单地在这个模块中添加函数deal,它定义了玩家的初始卡片,然后使用map_手牌、牌组等等执行它需要的任何操作。您需要考虑您的代码需要做什么,并定义一种流。使用defp定义的函数只能在同一模块中使用。可以从其他模块调用使用def定义的模块非常感谢您的帮助,非常感谢@maulajutt如果答案有帮助,你应该在分数的正下方打一个绿色的复选标记,将其标记为正确。完成!谢谢你让我认识Aleksei。