Ruby делает некоторую путаницу - методы используют ()
, но массивы, хэши и лямбда-выражения (самое близкое, что ruby имеет к функциям) могут использовать []
. Вместе с ducktyping это означает, что вы можете передавать объект и передавать ему значения, используя []
, не заботясь о том, является ли он предварительно вычисленным (массив), вычисляется каждый раз (лямбда-выражение) или вычисляется по мере необходимости и кэшируется (что сделано с хешем).
Другим примером, который объединяет оба, является Haskell. Насколько я помню, в язык не встроен синтаксис массива - доступ к индексам массива является вызовом функции и может использоваться как любая другая функция.
На самом деле я предпочитаю слияние - оно обеспечивает большую гибкость (что мне нравится). Знать, оптимизируешь ли ты скорость или память (как сказал Дэвид), приятно знать, но я хочу взять на себя эту ответственность, а не оставлять это на реплики, встроенные в язык.