Omm*_*nna 1 elixir phoenix-framework
我有这个型号:
defmodule MyApp.MyModel do
use MyApp.Web, :model
import Ecto.Query
# ....
Run Code Online (Sandbox Code Playgroud)
如何向其添加实例方法,该方法也使用MyModel上的其他字段?这不起作用,因为在一个html页面上它抛出一个异常说the key :my_method not found
defmodule MyApp.MyModel do
use MyApp.Web, :model
import Ecto.Query
# doesn't work
def my_method do
# how can I get access to "this" or "self" from here?
"test"
end
Run Code Online (Sandbox Code Playgroud)
Gaz*_*ler 11
由于Elixir是一种函数式编程语言,因此您没有方法,而是具有函数.你也没有"实例"的概念.有一个自我函数,用于识别当前进程的PID,但不应将其与您在其他编程语言中习惯使用的"this"相混淆.
始终使用以下函数调用函数:
module.function(arg1, arg2)
Run Code Online (Sandbox Code Playgroud)
因此,要my_method在您的示例(我已重命名my_func)中调用该函数,您将执行以下操作:
def my_func(my_model) do
my_model.some_attribute
end
Run Code Online (Sandbox Code Playgroud)
这里要注意的是你必须将struct作为参数传递给函数.然后你会用以下方法调用它:
foo = %MyModel{}
MyModel.my_func(foo)
Run Code Online (Sandbox Code Playgroud)
http://elixir-lang.org/getting-started/introduction.html是了解Elixir工作方式的好方法.