2017-03-06 43 views
0

我有一个棋牌游戏,我必须使用万灵药。第一个函数叫做readFrom(aString),它将接收一个字符串,然后从中提取变量。 我不想让你在我写的readFrom函数中遇到20个变量,所以我只是简单地为了这个问题。灵药中没有全局变量。如何从一个函数中获取变量并在另一个函数中使用它?

defmodule SnakesAndLadders do 

def readFrom(aString) do 
x=aString 
end 

def print() do 
IO.inspect x 
end 
end 

所以我只需要知道一个解决方法来获取变量x并将其用于函数print()。有没有可能的方法来做到这一点?谢谢。

+1

为什么你不把它作为一个参数? 'readFrom'和'def print(x)do ... end'中的'print(x)'。 – Dogbert

+0

噢因为实际参数传递将是 “板3名4 玩家2个 骰子1 2 2 2 2 梯子5 11 蛇8 4 通电自动扶梯6 9 通电抗蛇毒7 通电双4 转10” 然后我必须提取每个值到一个变量,例如,板3 4意味着行= 3和列= 4,所以readFrom将提取参数到不同的变量。 –

+2

而不是使用全局变量,考虑使用地图,它会保存所有参数或使用任务从其他函数返回这些数字。不要试图在Elixir中使用OOP思维模式。 – PatNowak

回答

1

鉴于您发布的示例代码:

defmodule SnakesAndLadders do 

    def readFrom(aString) do 
     x=aString 
     print(x) 
    end 

    def print(s) do 
     IO.inspect s 
    end 
end 

这将是实现这一目标的最简单方法。不要依赖全局变量 - 将值传递给函数。

并给予你的评论,你可能想要做这样的事情在readFrom功能:

def readFrom("board " <> row column <> rest = aString) do 
    {row,column} 
end 

这假定ASTRING与"board "开始。但是通过模式匹配来分解字符串的概念有很大的意义,所以我会留给你们进一步研究。

+0

这样做是最好的方法。我已经从aString提取每个数字到它们各自的变量,现在我需要创建和输出板。 https://gyazo.com/18dbd79d68fae93556bdece2b97c0b92?token=5f0d18f018be5107aaa3da00d4a359b1 我在java上使用了很多嵌套for循环,while循环但是它们不存在于elixir中。有小费吗? –

相关问题