我有这个型号:
wrong_database = {key[0] for key in data}.difference({self.name})
if wrong_database:
raise WrongDatabase("Can't write activities in databases {} to database {}".format(
wrong_database, self.name))
如何向其添加实例方法,该方法也使用MyModel上的其他字段?这不起作用,因为在html页面上它会抛出一个异常defmodule MyApp.MyModel do
use MyApp.Web, :model
import Ecto.Query
# ....
the key :my_method not found
答案 0 :(得分:11)
由于Elixir是一种函数式编程语言,你没有方法,你有函数。你也没有“实例”的概念。有一个self函数,用于标识当前进程的PID,但是不应该将它与您在其他编程语言中习惯使用的“this”相混淆。
始终使用以下函数调用函数:
readonly
因此,要调用示例中的module.function(arg1, arg2)
函数(我已将其重命名为my_method
),您可以这样做:
my_func
这里要注意的是你必须将struct作为参数传递给函数。然后你会用:
来调用它def my_func(my_model) do
my_model.some_attribute
end
http://elixir-lang.org/getting-started/introduction.html是了解Elixir工作方式的好方法。