доня.
это понятно
доня.
я говорю что это только для одного конкретного случая сделали
доня.
для итераторов
Дима
Ээ
Дима
Для итерируемых объектов
Дима
Всех, вообще всех
доня.
ну да, да
доня.
а если мне нужен протокол для чего-нибудь другого
Дима
Включая сеты, мапы, массивы, document.querySelector
Дима
В этом смысл символов
доня.
так нет абстракции такой, это все равно всё на уровне либо ручной проверки наличия полей, либо соглашений, что не очень
Дима
Наличие в объекте [Symbol.iterator] означает что объект знает о существовании протокола и корректно его имплементирует
Дима
Все остальные случаи являются изначально ошибочными
Дима
Вместо итератора подставь любой известный или даже свой символ
доня.
а потом мне нужен протокол с 10 полями и руками их проверяй, такое
KlonD90
добро пожаловать в 2к17
оно там уже дико давно
доня.
да мало ли зачем, ты интерфейсы с более чем одним методом никогда не видел?
Дима
Ты не понимаешь, это не поле "моё значение"
Дима
Это именно метка протокола
доня.
да я понимаю
доня.
ещё раз
Дима
Ты либо имплементируешь его целиком, либо нет
Дима
Это не интерфейс, не думай о нем так
доня.
а, ну ты про это
Дима
Из чего следует, что протокол с десятью полями — это non sense
доня.
хм, ну ладно, да, в этом есть смысл
доня.
я понял что проверять имеет смысл только один метод
Alexander
Может кто знает. Виртуализация в биосе включена, hyper-v вырублен. А всё равно показывает отключенную виртуализацию. Что делать?
доня.
но остальные 10 могут нуждаться в реализации, поэтому "протокол с 10 полями - это non sense" вот это мне непонятно
Sergey
я понял что проверять имеет смысл только один метод
символы не для методов а для того чтобы знать что объект умеет в твой протокол А сколько там методов это другой разговор
доня.
а, ну тогда другой момент
доня.
если символы для методов, то не будет коллизии имён
доня.
вот, всё, я только что прозрел
доня.
именованные методы вообще не нужны
доня.
нужны только методы на символах для реализации протоколов (ad-hoc полиморфизм)
доня.
всё остальное на функциях, как в рамде
Anonymous
привет. как правильно файл считывать? сделал: var fs = require('fs'); var seedC; fs.readFile('/testdata/seed-c.json', 'utf8', function (err, data) { if (err) throw err; seedC = JSON.parse(data); });
Anonymous
а он есть(
доня.
в любом случае неправильно
ixplo
Главное, символы не проебать 😬
Хотя из же щас можно вытаскивать
Дима
Главное, символы не проебать 😬
Это надо ещё постараться
доня.
так нельзя делать
ixplo
не нужно
Объяснитесь ) вот мне пришёл объект с методом-символом
ixplo
Имя у него символ
ixplo
Мне надо его или заранее знать, или выковыривать
Дима
Зачем тебе его знать?
ixplo
Чтоб вызвать
Дима
Если у тебя есть символ, предназначение которого тебе не ясно, то очевидно, что работать с ним ты не сможешь
Дима
В обычном объекте изначально может быть бесконечное число символов. Ты никогда не узнаешь для чего они
ixplo
Ща пример приведу
Дима
Я это к тому, что нужно действовать наоборот, и проверять наличие символов, которые тебе знакомы
Дима
Не надо
Дима
А если представить себе гипотетическую ситуацию, что твой модуль на необитаемом острове и ему нужен символ протокола
Дима
То на этот случай есть глобальный реестр, в который можно положить ключ или узнать, какой символ предназначен для твоего ключа
Дима
Сам ты ковырять
Sergey
@ZeroBias как думаешь? Object.prototype.toString.call(target).slice(8, -1) это адекватный способ определять тип? или же typeof + isArray хватит?
ixplo
хотя как ты расковыряешь чото хз )
Дима
const symbolProtocol = Symbol.for('my-protocol') Symbol.keyFor(symbolProtocol) // => 'my-protocol'
Artem
Ребят, помогите пожалуйста, проблема с npm пакетами Проект разрабатывался больше года, и постоянно дополнялся новыми npm пакетами, которые ставились через npm i xx --save или --save-dev и вот пришло время поднимать проект у других разработчиков и при команде npm i пакеты ставятся но похоже что ставятся не полностью. В конечном итоге, количество директорий существенно отличается от рабочей версии. Версия Ноды постоянно менялась в процессе разработки и все пакеты ставились на разных версиях. Подскажите пожалуйста как быстро возможно решить проблему, так чтобы все в конечном итоге работало Возможно ли навести там порядок или это не посильная задача?
Дима
const symbolProtocol = Symbol.for('my-protocol') Symbol.keyFor(symbolProtocol) // => 'my-protocol'
Причём это не псевдокод, а именно так и будет работать
ixplo
{ a: 1, [symbol]: 2 }
Дима
@ZeroBias как думаешь? Object.prototype.toString.call(target).slice(8, -1) это адекватный способ определять тип? или же typeof + isArray хватит?
Жесть 😁😁 Если что, то одним из well-know symbols является символ, который переписывает эту метку на любую, какую взбредёт в голову)) typeof + isArray + obj != null + Number.isNaN + ...
ixplo
const symbolProtocol = Symbol.for('my-protocol') Symbol.keyFor(symbolProtocol) // => 'my-protocol'
это типа так можно узнать, оч грубо говоря, имя символа?
ixplo
сверить его
Дима
Нет, это название символа в глобальном реестре, это не одно и то же
ixplo
Нет, это название символа в глобальном реестре, это не одно и то же
у двух символов же может быть одно название, верно?
Дима
у двух символов же может быть одно название, верно?
1) Да 2) В глобальном реестре — нет 3) В глобальных реестрах разных realms — опять да