StringOps
- неявное преобразование
@inline implicit def augmentString(x: String): StringOps = new StringOps(x)
И неявное преобразование применимо только в трех случаях только:
- Если выражение ? относится к типу ?, а ? не соответствует ожидаемому типу выражения pt.
- В выделении ?.? с ? типа ?, если селектор ? соответствует не обозначает доступный член ? .
- В выделении ?.? (args) с ? типа ?, если селектор ? обозначает некоторый член (ы), но ни один из этих членов применимо к аргументам args.
Когда вы пишете myName.contains
, это ни один из трех случаев (в частности, не второй случай, потому что contains
является доступным членом String
), поэтому StringOps
не может быть применен, и это String#contains(CharSequence)
и ошибка несоответствия типа.
Когда вы напишите myName.contains(_)
или c => myName.contains(c)
, это 3-й случай, поэтому можно применить StringOps
, и это StringOps#contains(Char)
после неявного преобразования.
Так что да, он работает как задумано.