3

完全な開示: 私は Coursera の Scala コースを受講しています (だった?) が、Sets の 2 番目の課題に困惑しました。私は(簡単に入手できる)答えだけを探しているわけではなく、とにかく限界のクレジットを受け取るでしょう. しかし、私は何が起こっているのかを本当に理解したいと思っています。

では、最初の質問です。「1 つの整数値からシングルトン セットを作成する関数を定義します。セットは、指定された 1 つの要素のセットを表します。」だから私の最初の試みはこれでした:

def singletonSet(elem: Int): Set = Set(elem)

したがって、この関数singletonSetは、新しく作成された Set を返すだけです。次のように呼び出すことができます。

val why = singletonSet(3)
// now why is a singleton set with a single integer, 3

この実装は些細なことのように思えたので、Google で答えを見つけました。

def singletonSet(elem: Int): Set = (x => x == elem)

今私の理解では、それ(x => x == elem)は整数を取り、xブール値を返す無名関数です。しかし... 何?JavaScript 開発者として、私はそれを翻訳することにしました:

function singletonSet(elem) {
    return function(x) {
        return x === elem;
    };
};

だから私は書くことができます(私はカレーですか?):

singletonSet(3)(4)

// singletonSet(3) => returns an anonymous function, function(x) { x === 3; };
// function(4) { return 4 === 3; }
// false

これが Scala で起こっていることに近いとすれば、私はシングルトン セットを作成していないように思えます。むしろ、2 つの数値が同じかどうかを確認しているだけです。

ここで何が欠けていますか?それは非常に基本的なものでなければならないと感じています。

前もって感謝します。

4

1 に答える 1