Ruby 学习(十)类class

定义

class 类名称
end

创建对象

new

自定义初始化构造器

class Box
  def initialize(w, h)
    @width = w
    @height = h
  end
end

obj = Box.new(100 ,200)

变量

局部变量

  • 局部变量是在方法中定义的变量。
  • 局部变量在方法外是不可用的。
  • 局部变量以小写字母_ 开始。

实例变量 @

  • 实例变量在变量名之前放置符号@
  • 未初始化的实例变量的值为 ni
class Person
    def initialize(name, height)
        @person_name = name
        @person_height = height
    end

    def show_detail
        puts "person_name : #@person_name"
        puts "person_height : #@person_height"
    end
    
end

per1 = Person.new("jack", 100)
per1.show_detail

类变量 @@

  • 类变量属于类,且是类的一个属性。
  • 类变量在变量名之前放置符号@@
  • 类变量不能跨类使用
  • 且必须初始化后才能在方法定义中使用。引用一个未初始化的类变量会产生错误。
  • 类变量在定义它的类或模块的子类或子模块中可共享使用。
class Person
    @@total_person=100
    def initialize(name, height)
        @person_name = name
        @person_height = height
    end

    def show_detail
        puts "person_name : #@person_name"
        puts "person_height : #@person_height"
    end
    
    def show_total
        puts "total_person : #@@total_person"
    end
end

per1 = Person.new("jack", 100)
per1.show_total 

全局变量 $

  • 可以跨类使用的变量,您需要定义全局变量。
  • 全局变量总是以美元符号 $开始。
  • 未初始化的全局变量的值为 nil
$global_var = 100

print $global_var 
# 输出 100

常量 大写字母开头:Constant

class Person
    VAR1 = 100
    VAR2 = 200
    def show
        puts "第一个常量的值为 #{VAR1}"
        puts "第二个常量的值为 #{VAR2}"
    end
end

per1 = Person.new
per1.show 

输出

第一个常量的值为 100
第二个常量的值为 200

伪变量

它们是特殊的变量,有着局部变量的外观,但行为却像常量。
不能给这些变量赋任何值。

  • self: 当前方法的接收器对象。
  • true: 代表 true 的值。
  • false: 代表 false 的值。
  • nil: 代表 undefined 的值。
  • __FILE__: 当前源文件的名称。
  • __LINE__: 当前行在源文件中的编号。

函数/方法 def

  • 方法名应以小写字母开头
  • 如果以大写字母作为方法名的开头,Ruby 可能会把它当作常量,从而导致不正确地解析调用。
  • 方法应在调用之前定义,否则 Ruby 会产生未定义的方法调用异常。

定义

   def 方法名称
      statement 1
      statement 2
   end

例子

class Person
    def hello
        puts "Hello Ruby!"
    end
end

obj = Person.new
obj.hello

# 输出 Hello Ruby!

定义

完整的

def method_name [( [arg [= default]]...[, * arg [, &expr ]])]
   expr..
end

没有参数的方法
调用:直接使用方法名称 method_name

def method_name 
   expr..
end

有参数的方法
调用:方法名称加上参数 method_name 25, 30

def method_name (var1, var2)
   expr..
end

给参数设定默认值

def method_name (var1=value1, var2=value2)
   expr..
end

返回值

  • 可以返回一个参数,
  • 也可以返回多个参数,用数组存放返回值
def test
   i = 100
   j = 200
   k = 300
return i, j, k
end
var = test
puts var

输出

100
200
300

类方法

类方法的声明和访问

   def 类名称.方法名称
      puts "return_date ===="
   end
  • 例子
class Accounts
   def reading_charge
      puts "reading_charge ===="
   end
   def Accounts.return_date
      puts "return_date ===="
   end
end

obj = Accounts.new

obj.reading_charge 
Accounts.return_date

输出

reading_charge ====
return_date ====

getter 和 setter

class Person
  # 初始化构造器
  def initialize(name, height)
    @person_name = name
    @person_height = height
  end

  # getter 方法
  def get_name
    @person_name
  end

  # setter 方法
  def set_name=(value)
    @person_name = value
  end

  # 定义方法
  def show_detail
    puts "person_name : #{@person_name}"
    puts "person_height : #{@person_height}"
  end
end

obj = Person.new("jack", 100)
puts obj.get_name
obj.set_name = "new name"
puts obj.get_name
jack
new name

to_s 方法

对象的字符串表示

没有重写to_s

#<Person:0x00007fdf450faf88>

重写to_s

class Person
  # 初始化构造器
  def initialize(name, height)
    @person_name = name
    @person_height = height
  end

  def to_s
    "#{@person_name} #{@person_height}"
  end
end

obj = Person.new("jack", 100)
puts obj.to_s
jack 100

访问控制

  • Public: Public 方法可被任意对象调用。
    • 默认情况下:
      • 方法都是 public 的,
      • 除了 initialize 方法总是 private 的。
  • Private: Private 方法不能从类外部访问或查看。只有类方法可以访问私有成员。
  • Protected: Protected 方法只能被类及其子类的对象调用。访问也只能在类及其子类内部进行。

类的继承

格式

class 子类 < 父类
  
end
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值