2017-03-06 17 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()に使用するには、回避策を知る必要があります。これを行う方法はありますか?ありがとう。これは、これを実現する最も簡単な方法でしょう

defmodule SnakesAndLadders do 

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

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

+1

なぜあなたはそれを引数として渡すのですか? 'readFrom'と' def print(x)do ... end'で 'print(x)'を実行します。 – Dogbert

+0

ああ実引数があろう渡さため "ダブル4 基板3 4 プレーヤー2つの ダイス1 2 2 2 2 ラダー5 11 蛇8 4 パワーアップエスカレータ6~9 パワーアップ抗毒素7 パワーアップ10をオン"そして、私は変数に各値を抽出する必要があります。たとえば、ボード3 4は行= 3と列= 4を意味します。したがって、readFromは引数を異なる変数に抽出します。 –

+2

グローバル変数を使用する代わりに、mapを使用することを検討してください。これは、すべての引数を保持するか、Taskを使用してこれらの数値を他の関数から返します。 ElixirでOOPの考え方を使用しようとしないでください。 – PatNowak

答えて

1

は、あなたが投稿コード例を考えます。グローバル変数に依存しないでください。値を関数に渡してください。

そして、あなたのコメントを与え、あなたはおそらく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ループはエリクシールには存在しません。任意のヒント? –

関連する問題