Ruby で Object#instance_variable_set 等を使うときの注意

Ruby では Object#instance_variable_set を使用することで任意の名前のインスタンス変数に値を設定することができます。

class X
    attr_reader :name
end

x = X.new

# @ + 変数名を渡す
x.instance_variable_set(:@name, "homu")
x.name
# => name

Object#instance_variable_set で渡す変数名には @ を含める必要が有ります。
これは Object#instance_variable_get などでも同様です。
これ、なんで変数名に @ を含めないとダメなんですかね。
逆に @ を含めなくてもよいケースってあるのかな。