Ruby学习之类和对象的简单理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/luyaran/article/details/85596578

我们都知道,Ruby是一种面向对象的编程语言,而面向对象编程语言的特性,无非就是封装、继承、多态和抽象等,它的程序主体则主要涉及到类和对象,咱们这次呢,不谈别的,只是说说这个类和对象。

咱们有过其它诸如PHP、Java语言的使用经验的兄嘚应该知道,类是对象的抽象,而对象则是类的具体化实现,你好比一个类,我们把它叫做车,里面定义了外观、车标、发动机信息等等,这就是个类,而对象呢,就是我们具体化的说一辆红色外观的奔驰车,我们根据类的信息,可以具体化的区分每一辆车,这就是类和对象的意义。

具体的关于类和对象的意义啊什么的,咱也废话也就不多说了,后期会补充说明的,现在咱们来看在Ruby中如何定义一个类:

class Lu
end

通过上述代码我们就算是定义了一个Lu类,而关键词end就是用来结束这个类的,类的所有变量和常量都是在上述两行代码之间来定义的。

我们再来看下在Ruby的类中的几种变量类型:

  • 局部变量:局部变量是在方法中定义的变量。局部变量在方法外是不可用的。在后续的章节中,您将看到有关方法的更多细节。局部变量以小写字母或 _ 开始。
  • 实例变量:实例变量可以跨任何特定的实例或对象中的方法使用。这意味着,实例变量可以从对象到对象的改变。实例变量在变量名之前放置符号(@)。
  • 类变量:类变量可以跨不同的对象使用。类变量属于类,且是类的一个属性。类变量在变量名之前放置符号(@@)。
  • 全局变量:类变量不能跨类使用。如果您想要有一个可以跨类使用的变量,您需要定义全局变量。全局变量总是以美元符号($)开始。

完事就要来创建对象了,同样是用new关键词,但是写法有点不同,如下:

luyaran = Lu.new

同时,Ruby也是允许我们向new关键词传递参数来初始化变量,不过这就需要我们在创建类的时候,同时声明initialize方法,具体用法如下:

class Lu
   def initialize(id, name, sex)
      @lu_id=id
      @lu_name=name
      @lu_sex=sex
   end
end
luyaran = Lu.new('1','luyaran','girl')

大概就是这么些了,我们再来看下Ruby中的函数,它的定义方法很简单,def开头,之后跟上方法名称,一般是小写,和Python差不多,不过需要end来结束这个方法,来看个简单但是完整的例子:

#!/usr/bin/ruby
 
class Lu
   def hello
      puts "Hello Ruby!"
   end
end
 
# 使用上面的类来创建对象
object = Lu.new
object.hello

咱们最后呢,来创建一个完整的类(Lu),里面有两个方法,一个(msg)显示人物信息,一个(num)显示咱们定义的人物数量,具体方式如下:

#!/usr/bin/ruby
 
class Lu
   @@num_person=0
   def initialize(id, name, sex)
      @lu_id=id
      @lu_name=name
      @lu_addr=sex
   end
   def display_details()
      puts "人物 id: #@lu_id"	#输出信息方式
      puts "人物 name: #@lu_name"
      puts "人物 sex: #@lu_addr"
    end
    def total_no_of_customers()
       @@num_person += 1
       puts "人物数量: #@@num_person"
    end
end

# 创建对象
luyaran = Lu.new("1","luyaran","girl")
cuijinpeng = Lu.new("2","cuijinpeng","boy")
 
# 调用方法
luyaran.display_details()
luyaran.total_no_of_customers()
cuijinpeng.display_details()
cuijinpeng.total_no_of_customers()

好啦,本次记录就到这里了。

如果感觉不错的话,请多多点赞支持哦。。。

扫描二维码关注公众号,回复: 4746816 查看本文章

猜你喜欢

转载自blog.csdn.net/luyaran/article/details/85596578
今日推荐