В Ruby, есть ли способ вывести аргументы функции в порядке, в котором они были первоначально объявлены?
Вот очень простой пример, демонстрирующий, что я имею в виду:
# Example data, an array of arrays
list = [
[11, 12, 13, 14],
[21, 22, 23, 24],
[31, 32, 33, 34],
[41, 42, 43, 44]
]
# Declare a simple lambda
at = ->(arr, i) { arr[i] }
Чтобы вернуть первый элемент первого массива, второй элемент второго массива и т. Д., Вы можете просто использовать #with_index
:
# Supply the lambda with each array, and then each index
p list.map.with_index(&at)
# => [11, 22, 33, 44]
Но этот вариант использования несколько надуманный.Более реалистичным использованием этой &at
лямбды будет возвращение, например, второго элемента в каждом из массивов.
Кажется, мне придется переопределить лямбду с помощью аргументов с перестановкой, поскольку аргумент Iхотите, чтобы карри находился не в первой позиции:
# The same lambda, but with swapped argument positions
at = ->(i, arr) { arr[i] }
# Supply the lambda with the integer 1, and then each array
p list.map(&at.curry[1])
# => [12, 22, 32, 42]
Или путем создания прокси-интерфейса, подобного приведенному ниже:
at_swap = ->(i, arr) { at.call(arr, i) }
Это правильно?Нет ли способа вывести из строя?Я чувствую, что это было бы полезно, чтобы мы могли лучше использовать методы и методы, но, возможно, я что-то упустил.
На этом сайте есть несколько похожих вопросов, но ни у одного нет конкретных ответов или обходных путей..
Ruby Reverse Curry: это возможно?
Ruby rcurry.Как я могу реализовать proc «правильное» каррирование?
Каррирование процесса с аргументами ключевых слов