41

squareと関数を試していcubeます。爆破square中に動作するのはなぜですか?cube

square = &1 * &1
square.(5)

正常に動作します

cube = &1 * &1 * &1
cube.(5)

スロー

** (ArithmeticError) bad argument in arithmetic expression
    :erlang.*(#Function<erl_eval.6.82930912>, 5)
    erl_eval.erl:572: :erl_eval.do_apply/6
    src/elixir.erl:133: :elixir.eval_forms/3
    /private/tmp/elixir-OVih/elixir-0.8.2/lib/iex/lib/iex/server.ex:19: IEx.Server.do_loop/1
4

3 に答える 3

55

0.10.3以降、演算子の前に括弧を付けて部分適用を行う必要があります&

このバージョンでは何の問題もありません:

iex> square = &(&1 * &1)
iex> square.(5)
25
iex> cube = &(&1 * &1 * &1)
iex> cube.(5)
125
于 2013-11-01T00:31:49.663 に答える