Everything is Object 一切皆对象
a = "hello" a.class # => String b = 3.14 b.class # => Float c = %w[pear cat horse] c.class # => Array
Instance Method & Instance Attribute 实例方法,实例属性
- Instance Method: 实例方法,成员方法,成员函数
- Instance Attribute: 实例变量,成员属性,属性(property),使用@定义
# class class User def initialize name, age @name = name @age = age end # getter def name @name end def age @age end end user = User.new('Hello', 18) puts user.name puts user.age
# class class User def initialize name, age @name = name @age = age end # getter def name @name end def age @age end # setter def name= name @name = name end def age= age @age = age end end user = User.new('Hello', 18) puts user.name puts user.age puts '-' * 30 user.name = 'hello 2' user.age = 20 puts user.name puts user.age
# class, attr_reader, attr_writer class User attr_reader :name attr_reader :age attr_writer :name attr_writer :age def initialize name, age @name = name @age = age end end user = User.new('Hello', 18) puts user.name puts user.age puts '-' * 30 user.name = 'hello 2' user.age = 20 puts user.name puts user.age
# class, method class User attr_accessor :name attr_accessor :age def initialize name, age @name = name @age = age end def say_hi puts "hello #{@name}, i am #{@age}" end end user = User.new('Hello', 18) user.say_hi
Class Method & Class Variable 类方法,类变量
- Class Method:类方法,静态方法
- Class Variable:类变量, 使用@@定义
# class, method class User attr_accessor :name attr_accessor :age @@counter = 0 def initialize name, age @name = name @age = age @@counter += 1 end def say_hi puts "hello #{@name}, i am #{@age}" end def self.get_counter @@counter end end puts User.get_counter user = User.new('Hello', 18) user.say_hi puts User.get_counter
Access Control 访问控制
- public
- protected
- private
# class, method class User attr_accessor :name attr_accessor :age def initialize name, age @name = name @age = age end def say_hello puts "hello..." say_hi say_hey end def say_hi puts "hello #{@name}, i am #{@age}" end def say_hey puts "hey, i am #{@name}" end protected :say_hi, :say_hey end user = User.new('Hello', 18) user.say_hello
Dynamic Ruby 动态特性
User内幕
# attr_accessor 方法从哪里来的? class User # ... end User.class # => class # Class.attr_accessor 背后的秘密 # define_method # attr_accessor, define_method define_method :hello do puts "hello world" end hello
自己实现 attr_accessor
# define_method class User # attr_accessor :name # attr_accessor :age def self.setup_accessor var define_method var do instance_variable_get "@#{var}" end define_method "#{var}=" do |value| instance_variable_set "@#{var}", value end end setup_accessor :name setup_accessor :age def initialize name,age @name = name @age = age end end user = User.new "hello", 18 puts user.name puts '-' * 30 user.name = "hello 2" puts user.name
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论