So sup开发者_运维技巧pose 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..
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
You can access the class-scope using define_method
.
class User
description = "I am User class variable"
define_method :print do
puts description
end
end
> User.new.print
I am User class variable
=> nil
I don't think it's good idea, though :)
To define a class variable, use an @@
:
class User
@@description = "I am a User class variable"
def print
puts @@description
end
end
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
精彩评论