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