我想打印出一个字符串
IO.puts("Count: #{my_count}")
Run Code Online (Sandbox Code Playgroud)
但是我希望输出中的前导零如
Count: 006
Run Code Online (Sandbox Code Playgroud)
我该怎么做,文档在哪里?
在Elixir中,您可以使用<>运算符连接字符串,例如"Hello" <> " " <> "World".
您还可以使用管道运算符|>将函数链接在一起.
我正在尝试编写Elixir代码来格式化在线游戏的货币.
def format_price(price) do
price/10000
|> Float.round(2)
|> to_string
|> <> "g"
end
Run Code Online (Sandbox Code Playgroud)
以上结果导致语法错误.我是否忽略了可以连接字符串的基本功能?我知道我可以自己定义一个,但如果我可以避免它,那似乎在我的代码中创建了不必要的混乱.
我意识到我可以通过简单地将方法链接在一起来完成同样的事情,to_string(Float.round(price/10000, 2)) <> "g"但是这种语法并不像阅读那么好,并且如果我想在以后添加步骤,那么将来扩展该方法会更加困难. .
Elixir是否有方法使用管道运算符连接文本,或者如果没有自己定义方法,这是不可能的?
Elixir似乎很酷,但我想知道它的缺点..如果有的话......
在erlang上选择它时还有其他潜在的缺点吗?
是否可以将本地混合项目用作十六进制依赖项?
使用Bundler我可以添加如下行:
gem 'action_subscriber', :path => "../action_subscriber"
Run Code Online (Sandbox Code Playgroud)
所以我可以在发布新版本之前尝试使用gem.这是否可以使用十六进制依赖关系管理工具?
在Rails中,如果我有以下设置:
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
def self.approved
where(approved: true)
end
end
Run Code Online (Sandbox Code Playgroud)
然后我可以做这样的事情:
post = Post.find(100)
comments = post.comments.approved
Run Code Online (Sandbox Code Playgroud)
快速获得给定的所有批准的评论Post.
我怎样才能在Ecto中做类似的事情?
defmodule MyApp.Post do
use Ecto.Model
schema "posts" do
#columns omitted
has_many :comments, MyApp.Comment
end
end
defmodule MyApp.Comment do
use Ecto.Model
schema "comments" do
#columns omitted
belongs_to :post, MyApp.Post
end
end
Run Code Online (Sandbox Code Playgroud)
我post有comments预装的:
post = MyApp.Post
|> MyApp.Repo.get(100)
|> MyApp.Repo.preload(:comments)
Run Code Online (Sandbox Code Playgroud)
我甚至不确定从哪个approved范围开始MyApp.Comment.
我正在读一本关于Elixir的书:介绍Elixir.
在字符串比较它说:
Elixir提供了两种比较字符串相等性
==和===运算符的选项.该==操作通常是最简单的,虽然其他产生相同的结果.
如果他们的意思相同,那么有两个运营商的目的是什么?
有没有办法从该频道外部向频道广播消息?
也许是这样的Channel.broadcast topic, event, data?
我在这里看到了类似的东西但是Phoenix.Channel.broadcast/3(截至今天)的最终版本采用了一个隐含通道和主题的套接字.
我正在尝试将结构转换为地图,以便能够清除所有的nil值
我目前正在使用此代码
case Nadia.get_updates do
{:ok, results} ->
Map.from_struct(results)
|> Enum.filter(fn {_, v} -> v != nil end)
|> Enum.into(%{})
Run Code Online (Sandbox Code Playgroud)
注意:Nadia.get_updates返回以下结构:https://hexdocs.pm/nadia/Nadia.Model.Update.html#t:t / 0
然而,我总是收到以下错误:Map.from_struct/1中没有匹配的函数子句
在Elixir中,引脚运算符用于防止变量重新绑定.但是,对于像Ecto这样的查询
from u in User, where: u.username == ^username
Run Code Online (Sandbox Code Playgroud)
的作者编程凤凰状态(第7章),其
请记住,^运算符(称为pin运算符)意味着我们希望保持^ username相同.
但这听起来不对,因为显然,查询中的比较不会导致任何重新绑定变量.
这本书的作者(JoséValim与谁合着)是错误的吗?Ecto中的引脚运算符只是查询Ecto DSL的构造而不是通常的Elixir引脚运算符吗?或者username,在宏扩展后,查询是否真的有机会重新绑定?
想象一下comments,您的数据库中有一个表.
注释表有列,id,text,show,comment_id_no.
如果用户输入注释,它会在数据库中插入一行
| id | comment_id_no | text | show | inserted_at |
| -- | -------------- | ---- | ---- | ----------- |
| 1 | 1 | hi | true | 1/1/2000 |
Run Code Online (Sandbox Code Playgroud)
如果用户想要更新该注释,则会在数据库中插入新行
| id | comment_id_no | text | show | inserted_at |
| -- | -------------- | ---- | ---- | ----------- |
| 1 | 1 | hi | true | 1/1/2000 | …Run Code Online (Sandbox Code Playgroud) elixir ×10
ecto ×2
channel ×1
dictionary ×1
distinct ×1
erlang ×1
postgresql ×1
sql ×1
struct ×1
telegram-bot ×1
where ×1