Это называется параметр .Параметр похож на «дыру», которую вы оставляете в определении подпрограммы.Когда вы вызываете эту подпрограмму, вы «заполняете» эту «дыру» аргументом .(Это называется «передачей аргумента».)
Здесь:
def square_of_sum (my_array, proc_square, proc_sum)
# ↑↑↑↑↑↑↑↑
Вы определяете метод с именем square_of_sum
с парой параметров.Третий из этих параметров называется proc_sum
.
Здесь:
puts square_of_sum(my_array, proc_square_number, proc_sum_array)
# ↑↑↑↑↑↑↑↑↑↑↑↑↑↑
Вы передаете объект, на который ссылается локальная переменная proc_sum_array
, в качестве аргумента для вызоваметод square_of_sum
.
Это означает, что внутри тела метода объект, который вы передали в качестве аргумента, будет привязан к параметру (это называется , связывающим аргумент спараметр ), т. е. когда вы разыменовываете параметр proc_sum
внутри тела square_of_sum
, он будет оценивать любой объект, переданный в качестве аргумента.
Обратите внимание, что proc_sum_array
является локальная переменная (вы знаете, что это локальная переменная, потому что 1) она начинается со строчной буквы и 2) это не метод).Локальные переменные называются «локальными» переменными, потому что они локальны для области, в которой они определены. В этом конкретном случае proc_sum_array
является локальной для области действия сценария, что означает, что она даже не существует в области действия метода square_of_sum
, так что вы просто не можете ссылаться на него вообще!
Обратите внимание, что это точно так же, как и для любого другого параметра square_of_sum
: вы ссылаетесь на объекткоторый передается в качестве аргумента для параметра proc_square
как proc_square
, а не как proc_square_number
.