Dan
Книжки почитай чтоли
Dan
За тебя никто тут ничего делать не станет
Lupusregina[beta]
проще нет способа
Roman
Парни надо помощь.Safari сам проматывает скролл элемента вверх.С чем связанно такое поведение?
Lupusregina[beta]
кстати, дальше для работы с токенами нужен способ их перебирать, в перед, назад. Копировать состояние(курсор)
Lupusregina[beta]
для этого я написал простенький класс
Lupusregina[beta]
class Each { constructor(array, index = 0) { this.array = array; this.index = index; } get(offset = 0, move = 1) { const index = this.index + offset; this.index += move; return this.array[index]; } clone() { return new this.constructor(this.array, this.index); } }
Lupusregina[beta]
Ну что? решил?
Lupusregina[beta]
блин. ток за обратил внимание что регулярку нельзя
Lupusregina[beta]
ыыы
Lupusregina[beta]
ну что
Lupusregina[beta]
я решил ее уже
Lupusregina[beta]
tokenize(source) { const eachChars = new Each([...source]); const NUM_CHARS = ["."]; for(let i = 0; i < 10; i++) NUM_CHARS.push(String(i)); const tokens = []; for(let char; char = eachChars.get(); ) { if ( ["*", "/", "+", "-", "(", ")"].includes(char) ) tokens.push(char); let num = ""; while( NUM_CHARS.includes(char) ) { num += char; char = eachChars.get(); } if ( num.length ) { tokens.push(num); eachChars.get(0, -1); continue; } } return this.tokenizePrepare(tokens); } вот версия токенайзера без регулярки
Lupusregina[beta]
показать решение? или будешь сам решать
Lupusregina[beta]
https://codepen.io/RainNeko/pen/WqqJag?editors=0012 вот кароче решение
Lupusregina[beta]
Вот картинка, наглядно показывающая принцип работы
Lupusregina[beta]
где
Lupusregina[beta]
нету там эвала
Lupusregina[beta]
ну так ты полностью копируешь, а надо до тестов
Lupusregina[beta]
мда. Ну скопируй все классы и конастанты и добавь снизу фунцию var calc = function (expression) { return (new EvalExpr).calc(expression); }
Lupusregina[beta]
получилось?
Lupusregina[beta]
хм. Она принимает список токенов, без скобок "(" ")". const nodes = []; eachTokens.toEnd(); for(let t; t = eachTokens.get(0, -1);) nodes.push( t instanceof Token && t.type & T_OPERATOR_UNARY ? new Node(t.type, t.value, nodes.pop()) : t ); Вначале она проходит по всем токенам справа на лево, заменяя унарные операторы, на узел( с унарным оператором + токеном справа). nodes.reverse(); - тут востанавливается порядок. eachTokens = new Each(nodes); for(const operators of operatorsOrder) { again: while(1) { eachTokens.toStart(); for(let t; t = eachTokens.get();) { if ( t instanceof Token && operators.includes(t.value) ) { nodes.splice(eachTokens.index - 2, 3, new Node(t.type, t.value, eachTokens.get(-2, 0), eachTokens.get(0, 0)) ); continue again; } } break; } } А тут, мы перебираем все наши операторы, в порядке от наиболее выского приоритета к наиболее низкому. Если есть такой оператор, то заменяем его и стоящие слева и справа токены на один узел, и потороряем перебор токенов сначала.
Dan🔰
Кто знает как это избежать?
Dan🔰
Dan🔰
Я пытаюсь взять содержимое iframe с помощью расширений chrome
Lupusregina[beta]
Я пытаюсь взять содержимое iframe с помощью расширений chrome
тебе надо, грузить свое расширение как в освновную так и в ифрайм страницы. Дальше определить что это есть, захватить апи postMessage и придумать протоокол, поторому ты все это свяжешь
Славик
надо вот запрещать HRам вбрасывать вакансии вообще =)
Славик
да там был спам, спрятанный под вакансию
MVD
хм. Она принимает список токенов, без скобок "(" ")". const nodes = []; eachTokens.toEnd(); for(let t; t = eachTokens.get(0, -1);) nodes.push( t instanceof Token && t.type & T_OPERATOR_UNARY ? new Node(t.type, t.value, nodes.pop()) : t ); Вначале она проходит по всем токенам справа на лево, заменяя унарные операторы, на узел( с унарным оператором + токеном справа). nodes.reverse(); - тут востанавливается порядок. eachTokens = new Each(nodes); for(const operators of operatorsOrder) { again: while(1) { eachTokens.toStart(); for(let t; t = eachTokens.get();) { if ( t instanceof Token && operators.includes(t.value) ) { nodes.splice(eachTokens.index - 2, 3, new Node(t.type, t.value, eachTokens.get(-2, 0), eachTokens.get(0, 0)) ); continue again; } } break; } } А тут, мы перебираем все наши операторы, в порядке от наиболее выского приоритета к наиболее низкому. Если есть такой оператор, то заменяем его и стоящие слева и справа токены на один узел, и потороряем перебор токенов сначала.
админы, может хватит этот флуд поощрать? Устроили в публичном чате обсуждение школьных задач. Создайте себе отдельный, или идите в лс. От этих кат уже глаза вянут
Славик
то есть копипаста вакансий по чатам настолько приевшийся тренд, что даже спамеры это используют
Славик
о, давайте баттл
Славик
возьмите задачу и решите ее
MVD
да там был спам, спрятанный под вакансию
Ну вообще ты прав. Есть js jobs, пусть там и выкладывают
Славик
проигравший делает как победитель скажет
Славик
в вашем случае если MVD решит, то лупус больше о катах в этом чате ни слова
Славик
в обратном случае MVD не будет против кат
Denis
в обратном случае MVD не будет против кат
Они же были друзья не разлей вода. Чуть в баню вместе не попали
Славик
так такие замесы только укрепляют дружбу
MVD
Я просто высказал свое мнение. Люди заходят спросить чтото важное, но оно теряется
Славик
спросить очередной учебник по Js?
Denis
Bitcoin (BTC) !btc ================== $ 10791.3509297 ₽ 675877.416618 ================== -0.340% / 1h +1.600% / 24h -11.640% / 7d Updated: 01:04:16
Denis
Я теперь предлагаю курс битка
kolay
Как сделать чтобы base class в приоритете вызвал метод дочернего класса, а он свой
Denis
Base class ничего не знает о дочерних
kolay
javascript class A { constructor () { m() } m = () => console.log('a') } class B extends A { m = () => console.log('b') } new B()
kolay
Тут нет дочерних
Теперь есть
Denis
А не в курсе что его экстендит В
kolay
Только делать super?
Denis
class A { constructor () { m() } m () { console.log('a') } } class B extends A { m () { console.log('b') } } class C extends A { m () { console.log('c') } } class D extends A { m () { console.log('d') } } Какого класса метод должен будет вызвать А?
Denis
Да и стрелочные там не будут работать
kolay
?
Denis
??
kolay
Почему
Denis
Попробуй
kolay
В 12 ноде уже есть class properties
Anonymous
Кто может с докерами помочь?
Lupusregina[beta]
Denis
В 12 ноде уже есть class properties
Там спутанный порядок вызова унаследованных конструкторов
kolay
ReferenceError: m is not defined at new A (repl:2:20) at new B (repl:1:1)
kolay
странно
kolay
а
kolay
> new B() a B { m: [Function: m] }
kolay
в cpp есть virtual методы
Denis
Lupusregina[beta]
в cpp есть virtual методы
ты хочешь из дочернего класса вызвать методы родителя? с такиже названием
kolay
Норм, придётся избавится от arrow функций