変数が参照であることは理解してるよ。元の本題は
def foo(n); n = 10; end
num = 0; foo(num); p num #=>0 の挙動の説明だろ。

Java や Python は Ruby と同じ挙動を示すけど、

C++ だと
int foo(int &n) { n = 10 }
int num = 0; foo(num); cout << num #=>10

Perl だと
sub foo { $_[0] = 10 }
my $num = 0; foo($num); print $num #=>10

そういう言語からきた人にとっては仮引数に代入して実引数に
影響を及ぼさないのは不自然だと感じられるんじゃないの?