Решение Alien состоит в том, чтобы сделать вещи максимально простыми:
Если ключевое слово enum зарезервировано, но не реализовано в вашем javascript определите следующее
const enumerate = spec => spec.split(/\s*,\s*/)
.reduce((e, n) => Object.assign(e,{[n]:n}), {})
Теперь вы можете легко использовать его
const kwords = enumerate("begin,end, procedure,if")
console.log(kwords, kwords.if, kwords.if == "if", kwords.undef)
Я не вижу причин делать значения перечисления явными переменными. Сценарии в любом случае являются морфизированными, и не имеет значения, является ли часть вашего кода строкой или допустимым кодом. Что действительно важно, так это то, что вам не нужно иметь дело с тоннами кавычек при их использовании или определении.
No. alias_method
- стандартный метод Ruby. alias_method_chain
- это надстройка Rails, разработанная для упрощения обычного действия по наложению псевдонима старого метода на новое имя, а затем псевдонима нового метода на исходное имя. Так, например, если вы создаете новую версию метода метода
с новой функцией new_feature
, следующие два примера кода эквивалентны:
alias_method :method_without_new_feature, :method
alias_method :method, :method_with_new_feature
и
alias_method_chain :method, :new_feature
Вот гипотетический пример: предположим, у нас есть класс Person с методом rename
. Все, что он делает, это берет строку типа «John Doe», разделяет ее на пробел и присваивает части first_name и last_name. Например:
person.rename("Steve Jones")
person.first_name #=> Steve
person.last_name #=> Jones
Теперь у нас проблема. Мы продолжаем получать новые имена, которые не t правильно написано с заглавной буквы. Итак, мы можем написать новый метод rename_with_capitalization
и использовать alias_method_chain
, чтобы решить эту проблему:
class Person
def rename_with_capitalization(name)
rename_without_capitalization(name)
self.first_name[0,1] = self.first_name[0,1].upcase
self.last_name[0,1] = self.last_name[0,1].upcase
end
alias_method_chain :rename, :capitalization
end
Теперь старое переименование
называется rename_without_capitalization
, а rename_with_capitalization
равно rename
. Например:
person.rename("bob smith")
person.first_name #=> Bob
person.last_name #=> Smith
person.rename_without_capitalization("tom johnson")
person.first_name #=> tom
person.last_name #=> johnson
alias_method_chain
- наихудший способ перехвата вызова метода. Если вы ищете подобную технику, не используйте ее вне рельсов.