[...] перегрузка создания массива в Ruby

Я написал библиотеку, которая расширяет несколько базовых классов Ruby за счет наблюдения за обертками, в основном за счет псевдонимов методов. Тем не менее, я наткнулся на контрольно-пропускной пункт с сокращением экземпляра массива (например, @a = [1, 2, 3] Кажется, я не могу найти какой-либо метод, который на самом деле вызывается при создании объекта Array с помощью сокращенных средств. Это не наследственное #[] метод в текущей области или наследуется от любого класса или модуля в цепочке предков. Я также перегружен или смотрел каждый метод из класса #new к примеру #initialize к одиночному методу #[] на объект класса Array на основе кода Ruby C

rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1);

Кто-нибудь знает, как я могу назначить метод, который будет в цепочке методов создания экземпляра сокращенного экземпляра Array?

1 ответ

К сожалению, как и почти любой другой язык программирования на планете, Ruby не допускает перегрузки литералов. Если вам требуется буквальная перегрузка, вам придется использовать один из немногих языков программирования, которые его поддерживают, например Ioke или Seph.

Вот пример в Ioke:

[] = method(foo, foo println)
[1]
; 1

И в Сефе:

[] = #(foo, foo println)
[1]
; 1

[Обратите внимание, что это, конечно, вызовет хаос в вашей системе, поскольку, например, большая часть стандартной библиотеки Ioke/Seph реализована в Ioke/Seph, и они используют списки повсеместно, так что в производстве система, вы хотите правильно инкапсулировать это.]

Другие вопросы по тегам