Ruby-类和对象

ruby是一种面向对象编程语言,具有面向对象的特性:封装、抽象、继承和多态性。

1.1 类

在Ruby中,类以关键字class开始,后面跟类名(应大写),以end结束。例如:

class Customer
    #...
end
1.2 变量

ruby提供四种类型的变量:
①局部变量:局部变量是在方法中定义的变量。局部变量在方法外是不可用的。局部变量以小写字母或 _开始。未初始化的变量值为nil。
②实例变量:实例变量可以跨任何特定的实例或对象中的方法使用。这意味着,实例变量可以从对象到对象的改变。实例变量以@开头。未初始化的变量值为nil。
③类变量:类变量可以跨不同的对象使用。类变量属于类,且是类的一个属性,并被共享在整个继承链中。类变量以@@ 开头。必须初始化之后才能够在方法中使用。
④全局变量:类变量不能跨类使用。如果您想要有一个可以跨类使用的变量,您需要定义全局变量。全局变量以$ 开头。
看到这里可能胡迷糊,不怕,给你举几个例子,记得运行看一下结果哦。

局部变量对的例子:

i0 = 1
loop {
  i1 = 2  #局部变量
  puts defined?(i0)
  puts defined?(i1)  
  break
}

跟我们平时理解的局部变量的含义一致。

实例变量的例子如下:

class Customer
   def initialize(id, name, addr)
      @cust_id=id
      @cust_name=name
      @cust_addr=addr
   end
   def display_details()
      puts "Customer id #@cust_id"
      puts "Customer name #@cust_name"
      puts "Customer address #@cust_addr"
    end
end

# Create Objects
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")

# Call Methods
cust1.display_details()
cust2.display_details()

说明一下:
①initialize()类似构造函数。如果定义多个initialize(),以最后一个为准。
②当您想要在一个单行上显示实例变量的文本和值时,您需要在 puts 语句的变量名前面放置符号(#)。文本和带有符号(#)的实例变量应使用双引号标记。
有点像获取一个对象的属性。

类变量的例子如下:

class Customer
   @@no_of_customers=0
   def initialize(id, name, addr)
      @cust_id=id
      @cust_name=name
      @cust_addr=addr
   end
   def display_details()
      puts "Customer id #@cust_id"
      puts "Customer name #@cust_name"
      puts "Customer address #@cust_addr"
    end
    def total_no_of_customers()
       @@no_of_customers += 1
       puts "Total number of customers: #@@no_of_customers"
    end
end

# Create Objects
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")

# Call Methods
cust1.total_no_of_customers()
cust2.total_no_of_customers()

类变量可以统计类对象的数量呢。

全局变量的例子如下:

$global_variable = 10
class Class1
  def print_global
     puts "Global variable in Class1 is #$global_variable"
  end
end
class Class2
  def print_global
     puts "Global variable in Class2 is #$global_variable"
  end
end

class1obj = Class1.new
class1obj.print_global
class2obj = Class2.new
class2obj.print_global

1.3 常量

常量以大写字母开头。定义在类或模块内的常量可以从类或模块的内部访问,定义在类或模块外的常量可以被全局访问。
常量不能定义在方法内。引用一个未初始化的常量会产生错误。对已经初始化的常量赋值会产生警告。

class Example
   VAR1 = 100
   VAR2 = 200
   def show
       puts "第一个常量的值为 #{VAR1}"
       puts "第二个常量的值为 #{VAR2}"
   end
end
# 创建对象
object=Example.new()
object.show

1.4 伪变量

它们是特殊的变量,有着局部变量的外观,但行为却像常量。您不能给这些变量赋任何值。
self: 当前方法的接收器对象。
true: 代表 true 的值。
false: 代表 false 的值。
nil: 代表 undefined 的值。
FILE: 当前源文件的名称。
LINE: 当前行在源文件中的编号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值