scala - Set#apply with argument `Unit` -
scala puzzlers presents "puzzler":
scala> list("1", "2").toset() + "3" warning: there 1 deprecation warning; re-run -deprecation details res13: string = false3 the explanation notes above code de-sugars to:
(list("1", "2").toset[any] apply ()) + "3"
but why doesn't following return false?
scala> set("1")() <console>:11: error: not enough arguments method apply: (elem: string)boolean in trait gensetlike. unspecified value parameter elem. set("1")() ^
the compiler smart enough know makes no sense set[a].
set[a]#apply has signature:
apply(elem: a): boolean i.e., must supply argument of a, , a invariant set. if try supply unit set[int], type mismatch, not false.
scala> set("1")(()) <console>:19: error: type mismatch; found : unit required: string set("1")(()) ^ okay, question has 1 less set of parentheses code above. compiler assuming you're not trying pass unit, because can't. if had set[unit], could.
scala> set(())() warning: there 1 deprecation warning(s); re-run -deprecation details res41: boolean = true
Comments
Post a Comment