First, there is a bit of terminology to clean up in the question before answering it.
One is that you never "call" variables. The Ruby expression
my_object.variable
is a method call. There is no such thing as a variable call. You call methods, not variables. Even if the method is named variable. :)
The second is if you did define the method like this
def variable
@variable
end
either directly or by saying
attr_reader :variable
Then you have a method named variable and a variable named @variable.
Now to answer the question.
Ruby places access modifiers public, protected, and private on methods only, and not on variables. Access controls on variables don't really make sense, because they only be referenced within an object’s methods, and never with a prefix! In other words, you can never write this:
obj.@var
That's just a syntax error. You can write
obj.var
where var is the name of a method. And the access controls apply to that method only.
The fact that you may be making variables and methods with the same name (except for the @) actually doesn't matter. Only methods have access controls.
Hope that helps clear up some understandable confusion!