Это означает, что в области видимости есть черта, в которой есть функция с этим именем, но используемый вами объект не реализует такую черту.
В вашем конкретном случае эта чертасодержит all
метод std::iter::Iterator
, но ваш объект ('a'..'z')
если тип Range<char>
не реализует его.
Как ни странно, ваш второй пример компилируется, потому что (b'a'..b'z')
имеет тип Range<u8>
, который реализует Iterator
.
Вы, вероятно, задаетесь вопросом, почему Range<char>
не реализует итератор.Это потому, что между допустимыми значениями char
есть недопустимые значения, поэтому эти диапазоны просто не могут быть повторены.В частности, допустимыми являются только символы в диапазонах [0x0, 0xD7FF]
и [0xE000, 0x10FFFF]
, IIRC.