Size: a a a

2020 November 06

a

antuan in Rust Beginners
Алексей Герасимов
я бы вообще не стал завязываться на имя варианта, если эта строка во внешней системе будет храниться. или в принципе будет выходить за пределы памяти процесса. Иначе об этом надо постоянно помнить и нельзя переименовывать
согласен, тоже об этом думал...
источник

АГ

Алексей Герасимов... in Rust Beginners
источник

АГ

Алексей Герасимов... in Rust Beginners
и руками прописал какие имена нужны на выходе
источник

SL

S. L. in Rust Beginners
Переслано от S. L.
в чем смысл строчки T::foo(s) ? Таким образом я вызываю foo() которая описана в трейте, то есть без реализации?
источник

АМ

Александр Маглеванны... in Rust Beginners
S. L.
Переслано от S. L.
в чем смысл строчки T::foo(s) ? Таким образом я вызываю foo() которая описана в трейте, то есть без реализации?
На чем раньше писал?
источник

SL

S. L. in Rust Beginners
Александр Маглеванный
На чем раньше писал?
js/ts, серверный и браузерный
источник

a

antuan in Rust Beginners
Блокчеин на ноде?)
источник

r

red75prime in Rust Beginners
S. L.
Переслано от S. L.
в чем смысл строчки T::foo(s) ? Таким образом я вызываю foo() которая описана в трейте, то есть без реализации?
T::foo - это короткая запись для <S as T>::foo. То есть вызывается реализация для S
источник

АГ

Алексей Герасимов... in Rust Beginners
S. L.
Переслано от S. L.
в чем смысл строчки T::foo(s) ? Таким образом я вызываю foo() которая описана в трейте, то есть без реализации?
компилятор может найти реализацию, ибо для данного типа она единственная
источник

SL

S. L. in Rust Beginners
antuan
Блокчеин на ноде?)
на расте
источник

PP

Pavel Perestoronin in Rust Beginners
antuan
Блокчеин на ноде?)
)))
источник

SL

S. L. in Rust Beginners
red75prime
T::foo - это короткая запись для <S as T>::foo. То есть вызывается реализация для S
мне не ясно то, почему это так, ведь в самом трейте нет реализации. Можете мне объяснить как это обрабатывается компилятором?
источник

PP

Pavel Perestoronin in Rust Beginners
S. L.
мне не ясно то, почему это так, ведь в самом трейте нет реализации. Можете мне объяснить как это обрабатывается компилятором?
Есть реализация трейта для структуры
источник

PP

Pavel Perestoronin in Rust Beginners
5 строка
источник

SL

S. L. in Rust Beginners
это там, где impl
источник

PP

Pavel Perestoronin in Rust Beginners
Да
источник

АМ

Александр Маглеванны... in Rust Beginners
S. L.
js/ts, серверный и браузерный
В JS вроде как похожих механик нету, но можно со стороны ООП чтоб понятнее было: S - это класс, T - интерфейс. foo - это метод интерфейса, который принимает ссылку на инстанс объекта его реализующего.

s - это инстанс S, а S реализует T, значит у s есть метод foo.
Поэтому ты можешь вызвать s.foo().
foo - это все еще статичная функция, принимающая один аргумент. Ты можешь вызвать T::foo(&s) как статичную функцию.
Ну и так как известно, что S реализует T, ты можешь вызвать S::foo(&s).
Иногда реализации трейтов конфликтуют в названиях функций, поэтому ты можешь указать какой именно foo ты вызываешь. В частности, в этом случае, ты вызываешь реализацию foo от трейта T.
<S as T>::foo(s)
источник

АГ

Алексей Герасимов... in Rust Beginners
S. L.
мне не ясно то, почему это так, ведь в самом трейте нет реализации. Можете мне объяснить как это обрабатывается компилятором?
компилятор видит все реализации всех трейтов для всех типов в пределах модуля, поэтому может перейти от трейта к его реализации для конкретного типа, если она есть. Тип s он знает, трейт ты сам назвал, остальное дело техники
источник

SL

S. L. in Rust Beginners
то есть он сам поймет что если я обращаюсь к T::foo(s) то на самом деле я хочу обратиться к S::foo(s), поскольку s это инстанс S и в S описана реализация?
источник

АМ

Александр Маглеванны... in Rust Beginners
S. L.
то есть он сам поймет что если я обращаюсь к T::foo(s) то на самом деле я хочу обратиться к S::foo(s), поскольку s это инстанс S и в S описана реализация?
Да, компилятор сам поймет какую реализацию вызывать
источник