0

私はCoffeeScriptの初心者なので、私の質問は建設的ではないかもしれません。もしそうなら、ごめんなさい。とにかく、問題は関数を書くことです。以下の2つの方法を試しましたが、変数がうまく機能しませんでした。これはどのように書くべきですか?

1番目の方法:arg.foo

triangle = (arg...) ->
    if arg.base == undefined then arg.base = 1;
    if arg.height == undefined then arg.height = 1;
    arg.base * arg.height / 2

document.writeln triangle
    base:8
    height:5 # => return 0.5 ...

2番目の方法:arg ['foo']

triangle = (arg...) ->
    if arg['base'] == undefined then arg['base'] = 1;
    if arg['height'] == undefined then arg['height'] = 1;
    arg['base'] * arg['height'] / 2

document.writeln triangle
    base:8
    height:5 # => return 0.5 ...

ご親切にありがとうございました。

4

2 に答える 2

1

私はこの機会を利用して、他のいくつかの優れた点について言及します。

構文(splatと呼ばれる)が残りの引数を取り、それらを配列に配置するため、最初の試行はarg...機能しません。...arg

デフォルトパラメータの改善点は次のとおりです。

triangle = (arg) ->
    arg.base ?= 1
    arg.height ?= 1

    arg.base * arg.height / 2

コンストラクト?=実存演算子を使用しており、iffisまたは。arg.base ?= 1に割り当て1られます。arg.basearg.basenullundefined

しかし、それはさらに良くなります!Coffeescriptは割り当ての破棄をサポートしているので、次のように書くことができます。

triangle = ({base, height}) ->
    base ?= 1
    height ?= 1

    base * height / 2

必要に応じて、Coffeescriptのデフォルトの引数を次のように使用できます。

triangle = ({base, height} = {base: 1, height: 2}) ->
    base * height / 2

しかし、またはのみを指定できるようにしたい場合、つまり、のように呼び出す場合は、それは機能しないため、おそらく必要なものではありません。 baseheighttriangle(base: 3)heightundefined

于 2012-09-07T13:40:51.987 に答える
0

答えを見つけてすみません。argの代わりに使用する必要がありarg...ます。

triangle = (arg) ->
    if arg.base == undefined then arg.base = 1;
    if arg.height == undefined then arg.height = 1;
    arg.base * arg.height / 2

document.writeln triangle
    base:8
    height:5 # => return 20 !!!
于 2012-09-07T03:55:10.440 に答える