
Oleg
07.12.2016
14:06:33
Может быть такое что не выйдет перенести всё

Aldar
07.12.2016
14:07:18
@sovamist , что-то ты замудрил с глобальными методами

Сергей
07.12.2016
14:07:49
В js надо указать на каком объекте ты вызываешь метод
В руби нет

Vladimir
07.12.2016
14:08:01

Google

Vladimir
07.12.2016
14:08:07
и его как раз завезли

Сергей
07.12.2016
14:08:15

Дмитрий
07.12.2016
14:08:23
куда угодно

Vladimir
07.12.2016
14:08:26
Object

Дмитрий
07.12.2016
14:08:35
Хоть на {}

Сергей
07.12.2016
14:08:40
По контексту

Дмитрий
07.12.2016
14:08:56
Reflect

Сергей
07.12.2016
14:09:04
В руби в середине кода может быть написано some()
Руби начнет резолвить его вверх по стеку и в стороны по объектам

Oleg
07.12.2016
14:10:04
В JS по цепочке лексического окружения

Дмитрий
07.12.2016
14:10:09
Из js это выпилили, это был with

Oleg
07.12.2016
14:10:35
С with - цепочка переключается на объект и его цепочку

Google

Сергей
07.12.2016
14:11:12
Я давно хочу себе транспайлер руби в джс без рантайма
Но все встало как раз на резолве методов

Дмитрий
07.12.2016
14:11:59
Совместить with и Proxy
Прости господи

Сергей
07.12.2016
14:12:10
Метода может не быть в этом файле вообще

Дмитрий
07.12.2016
14:12:16
Не важно

Сергей
07.12.2016
14:12:27

Дмитрий
07.12.2016
14:12:46
5 минут

Oleg
07.12.2016
14:12:52
Кстати о руби - в какой-то момент я переписал одни из алгоритмов с JS на руби. Потому что оно на столько сложное что в голове не умещалось, а нужно было чтобы уместилось. В руби в этом плане проще. Но, в какой-то момент можно будет переписать назад, когда закостенеет и менять ничего больше не нужно будет. На корном руби.

Дмитрий
07.12.2016
14:12:57
Не самый простой выкрутас

Сергей
07.12.2016
14:13:23
Будет забавно, если ребята из опал не смогли сделать, а мы сможем

Oleg
07.12.2016
14:13:45
Надо попробовать, даже интересно стало

Сергей
07.12.2016
14:15:01
Если придумаем способ, я продолжу писать

Дмитрий
07.12.2016
14:15:04
class Some {
anyMethod() {
shouldBeValid()
}
}
Я правильно понимаю задачу?

Сергей
07.12.2016
14:15:22
Ага
Наследование тоже должно уметь
Но давай сначала это
ещё в рубях есть очень сильная штука, это метод в который передается управление, если вызываемый метод был не найден
прям как в пэхапэ
будь такая штука в js
то всё было бы просто

Ivan
07.12.2016
14:29:42

Google

Дмитрий
07.12.2016
14:35:54

Oleg
07.12.2016
14:35:59

Дмитрий
07.12.2016
14:36:01
Везде strict mode

Oleg
07.12.2016
14:36:12
В хроме в консоле работает
Вполне
Но стрикт увы, да

Дмитрий
07.12.2016
14:36:51
У меня не взлетает

Сергей
07.12.2016
14:36:52
но можно

Oleg
07.12.2016
14:36:59
Вот

Дмитрий
07.12.2016
14:37:22

Oleg
07.12.2016
14:37:23
У меня видимо волшебный хром

Дмитрий
07.12.2016
14:37:31
А это я уже сделал, делая обёртку)
Но object.method

Сергей
07.12.2016
14:37:47
гист

Дмитрий
07.12.2016
14:38:01
Просто method без with никак

Oleg
07.12.2016
14:38:45
Генерить если то можно и без стрикта
Хотя это конечно очень костыль

Сергей
07.12.2016
14:39:40
можно конечно ко всем вызовам добавлять что-то вроде $LOCAL.

Google

Дмитрий
07.12.2016
14:39:45

Сергей
07.12.2016
14:39:48
но если не читать, то минификация и ок

Дмитрий
07.12.2016
14:40:00
const goal = () => console.log('And we have a winner')
const methodMissing = property => () =>
console.log('you called ' + property + ' but it doesn\'t exist!')
const getter = (object, prop) =>
Reflect.has(object, prop)
? Reflect.get(object, prop)
: methodMissing(prop)
const proxyParams = {
get: getter
}
class Some {
constructor() {
return new Proxy(this, proxyParams)
}
anyMethod() {
goal()
}
}
const value = new Some
value.anyMethod2()
value.anyMethod()
> you called anyMethod2 but it doesn't exist!
> And we have a winner

Oleg
07.12.2016
14:40:31
Впрочем про генерить - можно и просто проверять наличие, если нет ничего - вызывать метод дефолтовый, и никаких трайкатчев

Сергей
07.12.2016
14:41:21

Oleg
07.12.2016
14:41:42
Кейс?
Где нельзя

Admin
ERROR: S client not available

Дмитрий
07.12.2016
14:41:58
Гляньте сначала пример)
Зря что ли писал ?

Oleg
07.12.2016
14:42:16
Уже читаю

Сергей
07.12.2016
14:42:17
Кейс?
динамическое наследование
я тоже читаю

Oleg
07.12.2016
14:43:26
Годнота

Сергей
07.12.2016
14:43:42
мне кажется или если выпилить proxy тоже будет работать
кроме methodMissing
https://repl.it/EjIZ/1

Дмитрий
07.12.2016
14:44:40
так там кроме methodMissing и нет ничего)

Oleg
07.12.2016
14:44:54
Эм

Сергей
07.12.2016
14:44:56
https://repl.it/EjIZ/2

Google

Oleg
07.12.2016
14:44:59
Ну так будет просто вызов же
Не?
Если выпилить

Дмитрий
07.12.2016
14:45:04
Это иллюстрация форварда на метод при отсутствии метода

Сергей
07.12.2016
14:45:22
это да
работает
прям гуд)
https://repl.it/EjIZ/3
но вот так ((

Дмитрий
07.12.2016
14:45:57
А тут я объясню ход мысли
В прокси где getter мы вызываем методы обернутые в with
В with такой же враппер-любого-метода, но не выводящий сообщение в консоль, а резолвящий на свой метод
Но with в js — всё ¯\_(ツ)_/¯
А так бы работало

Сергей
07.12.2016
14:48:43
видимо придется что-то вроде $LC.callMethod(‘demo’, [‘arg1’, ‘arg2’])

Дмитрий
07.12.2016
14:48:44
Если при транспиляции просто бахнуть ко всем методам внутри классов this, то проблема будет исчерпана

Сергей
07.12.2016
14:49:13
ну теоретически можно
правда это всё же не всегда this
придется во все классы пихать Proxy
это достаточно медленно
можно транспайлить swift в js
почти 1 к 1