Question: So suppose I have this (not working): 

```
class User
   description = "I am User class variable"
   def print
       puts description
   end
end

```

So, how should I use the var description, how to pass this into a method as a default parameter, or used in the method directly? Thanks..

Answer: 
In your case, the `description` is only local variable. You can change this scope using special characters `@`, `@@`, `$`:

```
a = 5
defined? a
=> "local-variable"

@a = 5
defined? @a
=> "instance-variable"

@@a = 5
defined? @@a
=> "class variable"

$a = 5
defined? $a
=> "global-variable"

```

For your purpose, I think it might be using by this way

```
class User
  def initialize(description)
    @description = description
  end

  def print
      puts @description
  end
end

obj = User.new("I am User")
obj.print
# => I am User

```
Instance variables must be prefixed with an **@** and are not accessible from outside.
Class variables must be prefixed with an **@@**.

The first time you use this variable anywhere in code, it will be initialized.
If you want to access the value from outside:

```
attr_reader :description

```

<http://rubylearning.com/satishtalim/tutorial.html>