2017-03-06 46 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中。有小費嗎? –

相關問題