我已经习惯用pc来开发erlang程序,一个是mac os x 10.6,另一个是mac os x 10.7.
在".emacs"两个pc的文件中,它包含以下脚本
;;handle emacs utf-8 input
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(prefer-coding-system 'utf-8)
Run Code Online (Sandbox Code Playgroud)
但是当我在一台电脑中输入包含汉字的备注并保存,然后下载到另一台电脑.中文字符无法正确显示.反向操作的相同故事.
我想知道如何检查当前文件的编码类型?有没有命令可以做到这一点?
在Elixir中调用Erlang函数的格式是什么?
具体来说,我如何调用函数iex以及在哪里可以找到Erlang提供的模块和函数列表.
我写了日志:
Logger.info(payload|>inspect)
Run Code Online (Sandbox Code Playgroud)
有效载荷是二进制格式,可能相当大.
出于调试目的,我需要完全编写它,但是,我得到:
15:04:31.269 [info] <<10, 36, 102, 102, 100, ...>>
Run Code Online (Sandbox Code Playgroud)
像这样,但我缩短了线条以适应(更大).
当调试foo具有列表推导的模块(例如)临时函数名称时,例如
foo:'-loop/4-lc$^2/1-3-'
Run Code Online (Sandbox Code Playgroud)
可以在跟踪输出或错误消息中找到.如果许多列表推导在一个模块中,通常很难找出哪一个正在运行.
如何解释函数名称?
这些函数的调用参数有什么意义?
返回值的含义是什么?
强烈建议程序员不要进行解析转换,也不要对遇到的问题提供支持.
为什么强烈建议程序员不要使用parse_transform/2?这将不会得到支持吗?除了parse_transform/2之外,是否有一种机制可以在编译之前注入代码(运行时字节码修改)或修改源代码?
我有myerlib/src/myerlib.erl erlang库模块,我需要从Elixir模块调用它的函数.从elixir代码调用myerlib模块函数我可以写:myerlib.function(.....)但是
如果我将myerlib子目录放在deps/elixir目录下并使用mix.exs:
def deps do
[
{:myerlib, path: "deps/myerlib"}
# ...
]
end
Run Code Online (Sandbox Code Playgroud)
然后,当我这样做时,iex -S mix我收到此错误:
***(混合):路径选项只能用于混合项目,无效的路径依赖关系:myerlib
我创建了工作者,它从Arduino获取消息:elixir_serial handler,但现在我想在Channel中使用它来广播接收到的数据,我可以将socket注入:elixir_serial handle_info()吗?
defmodule MyApp.Serialport do
require Logger
use GenServer
def start_link() do
GenServer.start_link(__MODULE__, [])
end
def init([]) do
work()
{:ok, []}
end
defp work do
{:ok, serial} = Serial.start_link
Serial.open(serial, "/dev/tty.arduino")
Serial.set_speed(serial, 9600)
Serial.connect(serial)
Logger.debug "pid #{inspect serial}"
end
def handle_info({:elixir_serial, serial, data}, state) do
Logger.debug "received :data #{inspect data}"
{:noreply, state}
end
end
Run Code Online (Sandbox Code Playgroud)
您对如何改进工人代码有任何建议吗,例如:Gen_Server是必要的吗?
我试图从列表中找到非重复值,例如
原始清单:
iex> list = [2, 3, 4, 4, 5, 6, 6, 6, 7, 8, 8, 8, 9, 9, 10, 10, 10]
[2, 3, 4, 4, 5, 6, 6, 6, 7, 8, 8, 8, 9, 9, 10, 10, 10]
iex> unique = Enum.uniq(list)
[2, 3, 4, 5, 6, 7, 8, 9, 10]
iex> nondupes = unique -- Enum.uniq(list -- unique)
[2, 3, 5, 7]
Run Code Online (Sandbox Code Playgroud)
结果:[2,3,5,7]
我想知道是否有更好的方法来实现elixir/erlang
在MongoDB驱动程序的包中,我需要一个函数来生成唯一的文档ID.
此函数使用:erlang.now()v18中不推荐使用的函数
我寻求如何迁移的帮助,但没有成功.
我的实际代码(缩短):
defmodule MyModule_v17 do
use Bitwise, only_operators: true
def gen_trans_prefix do
{gs, s, ms} = :erlang.now
(gs * 1000000000000 + s * 1000000 + ms) &&& 281474976710655
end
end
Run Code Online (Sandbox Code Playgroud)
最好的我提出来:
defmodule MyModule_v18 do
use Bitwise, only_operators: true
Kernel.if Keyword.get(:erlang.module_info, :exports) |> Enum.any?(fn({:system_time, 1}) -> true; (_) -> false end) do
def gen_trans_prefix do
:erlang.system_time(:micro_seconds) &&& 281474976710655
end
else
def gen_trans_prefix do
{gs, s, ms} = :erlang.now
(gs * 1000000000000 + s * 1000000 …Run Code Online (Sandbox Code Playgroud)