Size: a a a

2020 April 13

SP

Stanislav Popov in rust_offtopic
Pavel Kvasnikov
Декоратор это не ключевое слово языка, это паттерн. В руби с этим ок, всё-таки стараются избегать прямого наследования и использовать mixin ака композиция - включаем в класс необходимое поведение, а не наследуем
слушай ну это смешно. я почти во всем руби коде видел подмену методов классическую рубишную
источник

PK

Pavel Kvasnikov in rust_offtopic
Stanislav Popov
слушай ну это смешно. я почти во всем руби коде видел подмену методов классическую рубишную
Ты имеешь ввиду манки патчинг?
источник

SP

Stanislav Popov in rust_offtopic
причем костыльно не через супер а типа создают old_method, потом его прячут
источник

EG

Emmanuel Goldstein in rust_offtopic
Emmanuel Goldstein
Ruby — это попытка написать Perl правильно, но не прокатило
Perl получилось, правильно не получилось. Оригинал логичнее.
источник

PK

Pavel Kvasnikov in rust_offtopic
Например такое
class X
end

x = X.new

def x.monkey_patch
  puts 'patched'
end

Теперь у конкретного инстанса есть новый метод, а других инстансов не будет
источник

SP

Stanislav Popov in rust_offtopic
декораторы там были и активно юзались, только не просто как аннотация к методу а вначале класса писалось чтото типа херани_мне_чтото_в_метод :метод
источник

PK

Pavel Kvasnikov in rust_offtopic
Stanislav Popov
причем костыльно не через супер а типа создают old_method, потом его прячут
Какая-то дичь
источник

PK

Pavel Kvasnikov in rust_offtopic
Stanislav Popov
декораторы там были и активно юзались, только не просто как аннотация к методу а вначале класса писалось чтото типа херани_мне_чтото_в_метод :метод
Аннотации к методу это дичь, которая получилась, потому что не додумались сделать нормально сразу, а аудитория не достаточно умная. В каких-то жавах и растах это оправдан - меньше бойлерплейта, в руби это можно сделать 100500 способами
источник

SP

Stanislav Popov in rust_offtopic
я не помню точно но буквально после первого хелловорлда ты видешь этот код и сам так же пишешь потому что все костыльно
источник

PK

Pavel Kvasnikov in rust_offtopic
Я могу признать проблему, но рубисты злоупотребляют мета программированием что приводит к абсолютно неподдерижваемому write-only
источник

SP

Stanislav Popov in rust_offtopic
вот просто тайпикал
источник

SP

Stanislav Popov in rust_offtopic
class User
 def initialize(first_name:, last_name:, birthday:)
   @first_name = first_name
   @last_name = last_name
   @birthday = birthday
 end

 attr_accessor :first_name, :last_name, :birthday
end

attr_accessor это метод который работает как декоратор
источник

PK

Pavel Kvasnikov in rust_offtopic
Питон в этом плане это баш не стероидах, тупой императивный баш для админов
источник

SP

Stanislav Popov in rust_offtopic
который исполняется на момент или создания класса, или создания инстанса или вообще прячет где то или дописывает код конструктора
источник

EG

Emmanuel Goldstein in rust_offtopic
Stanislav Popov
class User
 def initialize(first_name:, last_name:, birthday:)
   @first_name = first_name
   @last_name = last_name
   @birthday = birthday
 end

 attr_accessor :first_name, :last_name, :birthday
end

attr_accessor это метод который работает как декоратор
Он работает скорее как макрос
источник

SP

Stanislav Popov in rust_offtopic
Emmanuel Goldstein
Он работает скорее как макрос
ээм нет. макрос работает в компайлтайме. он сработает как метапрограммируемая дрисня которая патчит класс в рантайме
источник

PK

Pavel Kvasnikov in rust_offtopic
Перепиши его как
self.attr_accesor(:first, :last) 

и станет намного яснее
источник

PK

Pavel Kvasnikov in rust_offtopic
Stanislav Popov
ээм нет. макрос работает в компайлтайме. он сработает как метапрограммируемая дрисня которая патчит класс в рантайме
Это обычные автогенерируемые геттеры/сеттеры
источник

PK

Pavel Kvasnikov in rust_offtopic
Такие есть везде
источник

SP

Stanislav Popov in rust_offtopic
они не авто они в рантайме
источник