2016-08-11 6 views
6

私は本Études for ElixirからÉtude 3-1: Pattern Matchingを解決しようとすると、次のコードを使用しています。コンパイルエラー:「複数の節とデフォルト値で定義が機能ヘッドを必要とし、」

16 def area(:rectangle, a \\ 1, b \\ 1) do 
17  a * b 
18 end 
19 
20 def area(:triangle, a, b) do 
21  a * b/2.0 
22 end 
23 
24 def area(:shape, a, b) do 
25  a * b * :math.pi() 
26 end 

そして、私は次のエラーを取得しています:

** (CompileError) geom.ex:20: definitions with multiple clauses and default values require a function head.

説明は右のエラーメッセージの後にあります:

Instead of: 

    def foo(:first_clause, b \\ :default) do ... end 
    def foo(:second_clause, b) do ... end 

one should write: 

    def foo(a, b \\ :default) 
    def foo(:first_clause, b) do ... end 
    def foo(:second_clause, b) do ... end  

def area/3 has multiple clauses and defines defaults in a clause with a body 
    geom.ex:20: (module) 
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6 

どうやら私は、デフォルト値を使用することはできません:手に入れました。しかし、なぜ?

答えて

8

あなたが実際にデフォルト値を使用することができますが、エラーメッセージが示すように、あなたは機能ヘッドを指定する必要があります。必要な機能ヘッドを指定

14 def area(shape, a \\ 1, b \\ 1) 
15 
16 def area(:rectangle, a, b) do 
17  a * b 
18 end 
19 
20 def area(:triangle, a, b) do 
21  a * b/2.0 
22 end 
23 
24 def area(:shape, a, b) do 
25  a * b * :math.pi() 
26 end 

注ライン14を。 https://elixirschool.com/lessons/basics/functions/から

:エリクシールは、複数のマッチング機能のデフォルト引数を好きではない、それが混乱することができます。これを処理するために私たちは、デフォルトの引数を持つ関数ヘッドを追加

関連する問題