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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
Erlang 如何从elixir中相同模块的另一个方法中设置的方法访问变量?_Erlang_Elixir - Fatal编程技术网

Erlang 如何从elixir中相同模块的另一个方法中设置的方法访问变量?

Erlang 如何从elixir中相同模块的另一个方法中设置的方法访问变量?,erlang,elixir,Erlang,Elixir,我想从m2方法访问m1方法的参数x defmodule MyModule do def m1(x) do # some code end def m2() do # Accesss 'x' here IO.puts x end end 如何从方法m2访问x 恕我冒犯,但基于您的用例,您似乎在用面向对象的方法思考,在Elixir中,我们实际上没有“全局变量”的概念,您能试试这样的方法吗 defmodule MyM

我想从m2方法访问m1方法的参数x

defmodule MyModule do

    def m1(x) do
        # some code
    end

    def m2() do
        # Accesss 'x' here
        IO.puts x
    end
end

如何从方法m2访问x

恕我冒犯,但基于您的用例,您似乎在用面向对象的方法思考,在Elixir中,我们实际上没有“全局变量”的概念,您能试试这样的方法吗

defmodule MyModule do

    def m1(x) do
        m2(x) # Call m2 with x
    end

    def m2(param) do
        IO.puts param
    end
end

你不能这样做。禁止在BEAM中操作,因此在Erlang和Elixir以及所有其他基于BEAM的语言中都是如此。您必须为每个函数调用透明地提供所有必需的输入数据。您可以使用的其他组件来模拟它。例如,您可以使用或使用process working作为提供此类存储的服务器。该约束是构建高度可靠系统的基本构件,这是Erlang的主要目的。更多信息请阅读本文。在工作开始时,它被描述为最好的。

谢谢Hynek-Pichi-Vychodil

以表的形式提供健壮的内存存储。任何数据都可以使用键值对存储到表中。
以下是我的解决方案:

defmodule MyModule do

    def m1(x) do

        # Create named table and insert the variable

        :ets.new(:user_lookup, [:set, :protected, :named_table])
        :ets.insert(:user_lookup, {"key", x})

        # some code
    end

    def m2() do

        # Accesss 'x' here by using table lookup
        [{_, x}] = :ets.lookup(:user_lookup, "key")
        IO.puts x
    end
end

我不想从m1呼叫m2。方法m2将由另一个模块调用。