Вы использовали имя random_card
для двух разных вещей: 1) метод, данный вам вашим инструктором; и 2) имя аргумента вашего move
метода.
Второе использование определяет локальную переменную, которая маскирует (или скрывает) имя метода. Другими словами, в методе move
random_card
относится к любому значению, которое вы передали, когда вызывали move
. Он не вызывает метод.
Вот простая иллюстрация:
def foo
%w(hi hey howdy)[rand 3]
end
def bar1
puts foo
end
def bar2(foo)
puts foo
end
5.times { bar1 } # produces a random selection of hi's, hey's, and howdy's
puts
5.times { bar2 "Help! I'm stuck!" } # prints the passed message 5 times
puts
5.times { srand 12345; bar1 } # produces "howdy" 5 times
Учитывая то, что вы показали, вы, вероятно, не Тебе не нужен аргумент move
. Если да, дайте ему свое имя. Также убедитесь, что вы не возитесь с srand
где-то еще в вашей программе.
Еще один вариант - указать, что вы хотите использовать метод, а не аргумент с тем же именем, используя скобки. В приведенном выше примере измените bar2
на:
def bar2(foo)
puts foo()
end
Пустые скобки проясняют, что это вызов метода foo
, а не ссылка на (теперь не использованный) аргумент foo
.