我开始阅读有关Elixir编程语言的内容.
我明白那个:
我的问题是:它有一种GC吗?
我正在尝试从控制器中的Phoenix配置文件中获取值.
# config.exs
use Mix.Config
config :app_name, AppName.Endpoint,
url: [host: "localhost"],
debug_errors: false,
root: Path.expand("..", __DIR__)
Run Code Online (Sandbox Code Playgroud)
Application.get_env(:app_name, :url)例如,似乎什么也没有回报.
我错过了什么吗?
我们希望使用我们的内容可编辑,利用router.ex中生成的以下路由:
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :put_secure_browser_headers
end
pipeline :api do
plug :accepts, ["json"]
end
scope "/", TextEditor do
pipe_through :browser # Use the default browser stack
get "/", PageController, :index
resources "/posts", PostController
end
Run Code Online (Sandbox Code Playgroud)
和控制器功能,即创建:
def create(conn, %{"post" => post_params}) do
changeset = Post.changeset(%Post{}, post_params)
case Repo.insert(changeset) do
{:ok, _post} ->
conn
|> put_flash(:info, "Post created successfully.")
|> redirect(to: post_path(conn, :index))
{:error, changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
Run Code Online (Sandbox Code Playgroud)
但是我们不想使用生成的表单,然后我们尝试使用div和jquery方法$ .post来测试它:
<div …Run Code Online (Sandbox Code Playgroud) 我有两个模型,歌曲和投票,歌曲有很多票.我想选择所有歌曲并计算每张歌曲的票数.
使用mix gen任务生成的SongController中的索引操作已修改为:
def index(conn, _params) do
query = from s in Song, select: %{id: s.id, name: s.name, artist: s.artist}
songs = Repo.all(query)
render(conn, "index.html", songs: songs)
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下songs包含列表列表.但是在原始的生成函数中,songs = Repo.all(Song)它是一个Song结构列表.
这意味着模板中的song_path函数会出现以下错误消息: maps cannot be converted to_param. A struct was expected, got: %{artist: "Stephen", id: 3, name: "Crossfire"}
当然,我真正想做的是以某种方式num_votes在select语句中添加一个字段,然后以某种方式为Song结构创建一个相应的字段?
在Elixir文档中,他们继续使用带有斜杠的奇数表示法,例如:
is_boolean/1
IO.puts/1
String.length/1
is_function/2
++/2
Run Code Online (Sandbox Code Playgroud)
我只是猜测,但我认为它指的是arity.但如果是这样的话,为什么魔鬼不是在文档的任何地方提到的?这并不是说这是IT中的任何标准惯例(至少,在我20多年的IT期间,我从未见过).
我写了这个测试用例:
assert_raise ArgumentError, myFn(a,b)
Run Code Online (Sandbox Code Playgroud)
但它没有以我期望的方式评估.myFn引发一个ArgumentError(do: raise ArgumentError),但它没有被捕获assert_raise.
文档中的示例工作得很好:
assert_raise ArithmeticError, fn ->
1 + "test"
end
Run Code Online (Sandbox Code Playgroud)
从文档:
assert_raise(exception, function)
断言exception在function执行期间引发.返回已获救的异常,否则失败
我猜测在我的测试用例中,首先评估参数.但是我该怎么写呢?
在Elixir中,如果我尝试模式匹配以下两个元组:
{a} = {1, 2}
Run Code Online (Sandbox Code Playgroud)
我得到一个匹配错误.但如果我对两张地图做同样的事情:
%{x: a} = %{x: 1, y: 2}
Run Code Online (Sandbox Code Playgroud)
它工作正常,并a绑定到1.我可以看到为什么匹配这两个元组给出了一个错误,但为什么匹配地图不会出错?
我可以使用mix来全局安装一些软件包吗?我想类似行为npm的全局选项或gem的安装-这可能是因为我到处使用像包有用csv或yaml.
我缩小了问题的大小,因为它太大了.这是代码:
defmodule MayRaiseGenServer do
use GenServer
def start_link do
IO.puts "started MyServer, name is #{__MODULE__}"
GenServer.start_link(__MODULE__, [], name: __MODULE__)
end
def maybe_will_raise do
GenServer.call(__MODULE__, :maybe_will_raise)
end
def handle_call(:maybe_will_raise,_from, state) do
IO.puts "maybe_will_raise called!"
:random.seed(:erlang.now)
number = Enum.to_list(1..100) |> Enum.shuffle |> List.first
IO.puts "number is #{number}"
if rem(number,2) != 0 do
raise "#{number}"
end
{:reply, {"You got lucky"}, state}
end
end
defmodule MayRaiseSupervisor do
use Supervisor
def start_link([]) do
IO.puts "starting supervisor, name is #{__MODULE__}"
Supervisor.start_link(__MODULE__, [])
end
def init(arg) do …Run Code Online (Sandbox Code Playgroud) elixir ×10
ajax ×1
dictionary ×1
ecto ×1
elixir-mix ×1
erlang ×1
erlang-otp ×1
ex-unit ×1
jquery ×1
tuples ×1