我正在学习Elixir,并想知道为什么它有两种类型的函数定义:
def,调用usingmyfunction(param1, param2)fn,调用usingmyfn.(param1, param2)只有第二种函数似乎是第一类函数,可以作为参数传递给其他函数.模块中定义的函数需要包装在一个fn.有一些语法糖似乎是otherfunction(myfunction(&1, &2))为了使这容易,但为什么它首先是必要的?我们为什么不能这样做otherfunction(myfunction))?是否只允许调用模块函数而不像Ruby那样括号?它似乎从Erlang继承了这个特性,它也具有模块功能和实用程序,所以它实际上来自Erlang VM如何在内部工作?
有两种类型的函数并从一种类型转换为另一种类型以便将它们传递给其他函数有什么好处?呼叫功能有两种不同的符号吗?
所以,假设我想发送一堆电子邮件或重新创建站点地图或者每4小时一次,我将如何在凤凰城或只是使用Elixir?
如何使用空格连接列表中的两个字符串,如:
["StringA", "StringB"]
Run Code Online (Sandbox Code Playgroud)
变
"StringA StringB"
Run Code Online (Sandbox Code Playgroud) 在Elixir中,如何检查Python中的类型:
>>> a = "test"
>>> type(a)
<type 'str'>
>>> b =10
>>> type(b)
<type 'int'>
Run Code Online (Sandbox Code Playgroud)
我在Elixir中读到了类型检查器,例如'is_bitstring','is_float','is_list','is_map'等,但如果您不知道该类型是什么呢?
use和之间有什么区别import?
use是一种将给定模块用于当前上下文的简单机制
https://hexdocs.pm/elixir/Kernel.SpecialForms.html#import/2
从其他模块导入函数和宏
看起来有一点不同就是import让你挑选出特定的功能/宏,同时use带来一切.
还有其他差异吗?你什么时候用一个而不是另一个?
最近我一直在用docker compose进行一些实验,以便部署多个协作微服务.我可以看到微服务提供的许多好处,现在有一个很好的工具集来管理它们,我认为跳进微服务车并不是很难.
但是,我也一直在尝试Elixir,我非常喜欢它本身提供的好处.鉴于它鼓励将代码打包到多个解耦的应用程序中,并支持热代码升级,您如何将docker与elixir(或erlang)混合使用?
例如,如果我想使用docker因为它提供了dev-prod奇偶校验,那么elixir如何适应它?鉴于docker容器是不可变的,我失去了进行热代码升级的能力,对吗?蓝/绿部署或金丝雀发布怎么样?
我的意思是,我可以用Elixir编写微服务并使用它们就像用任何其他语言编写的那样,多语言无论如何都是微服务的好处之一,但是后来我没有得到使用OTP平台的全部好处,我猜测纯粹的协作erlang应用程序比使用中间队列在以不同(或非)语言编写的微服务之间进行通信更为优化.
在灵丹妙药中我们有地图:
> map = %{:a => "one", :b => "two"} # = %{a: "one", b: "two"}
> map.a # = "one"
> map[:a] # = "one"
Run Code Online (Sandbox Code Playgroud)
我们还有关键字列表:
> kl = [a: "one", b: "two"] # = [a: "one", b: "two"]
> kl2 = [{:a, "one"},{:b, "two"}] # = [a: "one", b: "two"]
> kl == kl2 # = true
> kl[:a] # = "one"
> kl.a # = ** (ArgumentError)
Run Code Online (Sandbox Code Playgroud)
两个为什么?
句法?是因为关键字列表具有更灵活的语法,允许它们被定义为没有卷曲,甚至没有括号作为函数调用的最后一个参数?那为什么不给这个语法糖吗?
重复密钥?是因为关键字列表可以有重复的键吗?为什么要同时使用Map样式访问和重复键?
性能?是因为关键字列表有更好的表现吗?那为什么要有地图?并且不应该通过键查找成员比使用元组列表更高效吗?
JS Array和Ruby Hash一样外观? …
这个问题是在Beam VM及其提供的功能的背景下,而不是图灵完整语言可以做的一般上下文.我想投入一些时间来学习纯Erlang或Elixir.我得到了两者之间的基本差异,因为宏语,更好的语法和更快的语言开发,我倾向于Elixir.
我的问题是:如果我选择Elixir,我会偶然发现我不能做的事情,但可以在Erlang中做些什么吗?我可以使用Elix的所有OTP内容,所有Erlang库,代码重新加载等吗?
我不是要求两者之间的偏好; 关于语言可能性的事实.优选地来自在生产中使用两者的人.
我正在学习Phoenix和Elixir,我来自Ruby/Rails,我在REPL中工作,pry用来检查我的数据库和应用程序状态.
我正试图弄清楚如何在Phoenix应用程序中与我的数据库和模型进行交互.我知道iex,但我不知道如何使用它从repl检查我的应用程序的数据库.我是否需要每次从repl使用ecto连接到它?有没有rails console等价物.我检查了Phoenix文件,Elixir Dose和Ecto repo,但找不到我要找的东西.我错过了什么吗?
编辑:根据下面的答案,我发现了ecto文档的这一部分.基于此我可以做类似的事情ArticlesApi.Repo.all ArticlesApi.Article