时间轴网站代码,千年之恋网页制作代码,建设一个商城网站需要多少钱,做百度推广需要有自己的网站吗使用Object.new创建新对象#xff0c;但是一次只使用一种方法#xff0c;这是感受以对象为中心的Ruby编程的最佳方式之一。不过这种方式并不能很好地扩展#xff0c;假如有一个正在运行地在线售票网站#xff0c;然后其数据库必须处理数以百计地售票记录#xff0c;那么可…使用Object.new创建新对象但是一次只使用一种方法这是感受以对象为中心的Ruby编程的最佳方式之一。不过这种方式并不能很好地扩展假如有一个正在运行地在线售票网站然后其数据库必须处理数以百计地售票记录那么可以在Ruby程序中寻找另外地一种方式去创建和操作类似的ticket的对象。 Ruby有一套完整的编程技术用于批量地创建对象从而不必对每一个ticket定义一个独立的price方法。与之前不同的是通过定义一个ticket类可以让每一个独立的ticket对象自动拥有一个price方法。这一点和其他高级语言的类很像。
一、类的设计
定义一个类
class Ticketdef eventCant really be specified yet... end
end一个特殊对象管理的信息和数据体现了对象的状态。需要完成以下事情 1、设置或重置对象的状态 2、回读状态 在Ruby对象中提供了便捷的数据存储和取回的机制实例变量。 实例变量使得独立的对象可以记住状态。实例变量和其他变量的机制十分相像赋值然后回读它们的值可以把它们相加、打印。 3、实例变量总是以一个开头 4、实例变量仅仅在它归属的对象内部可见 5、一个实例变量在类的其中一个方法中初始化。然后可以在这个类的任何方法中使用
class Persondef set_name(string)puts Setting persons name...name stringenddef get_nameputs Returning the persons name...nameend
endjoe Person.new
joe.set_name(Joe)
puts joe.get_name类的初始化 编写一个类时可以定义一个特殊的方法initialize。 这样这个方法将在每次创建类的实例时被创建在创建对象时可以使用这个自动初始化的过程来设置对象的状态。这里在每个ticket对象被创建时给它们指定一个地点和时间可以把正确的值作为传递参数发送给Ticket.new同样地这些参数将被自动地发送给initialize。
class Ticketdef initialize(venue, date)venue venuedate dateenddef venuevenueenddef datedateend
end
th Ticket.new(Town Hall, 11/12/13)
cc Ticket.new(Convention Center, 12/13/14)
puts Weve created two tickets.
puts The first is for a #{th.venue} event on #{th.date}
puts The second is for an event on #{cc.venue} event on #{cc.venue}运行这段代码将得到
Weve created two tickets.
The first is for a Town Hall event on 11/12/13
The second is for an event on Convention Center event on Convention Center
Setting persons name...
Returning the persons name...
Joe二、使用语法糖的setter方法
语法糖Syntax sugar是计算机科学中的术语指的是在编程语言中使用更易理解和更具有描述性的语法来代替较为复杂或低级的语法。 语法糖可以使代码更易读、易写也可以帮助程序员更快速地理解和领会代码的含义。它通常不会改变程序的行为但可以使代码更易于维护和修改。 例如在许多编程语言中可以使用for-each循环来遍历数组和集合而不需要像使用低级语言那样手动控制索引。这是一种语法糖它使程序更易于编写和理解。 另一个例子是在许多语言中可以使用lambda表达式或称为匿名函数来定义函数而不需要使用声明完整的函数名称和定义函数体。这种语法糖可以使代码更简洁、更灵活。 能够编写以等号结尾的方法实际上是Ruby提供了调用这种类型方法的语法糖来创造一些有趣的可能性。 在Ruby中setter方法是一种用于修改变量的方法通过在变量名后面添加一个冒号:和一个参数来实现。这种语法糖可以让代码更加简洁和易读。
class Person attr_accessor :name, :age def initialize(name, age) name name age age end def name(name) name name.capitalize end def age(age) age age.to_i end
end person Person.new(john smith, 25)
puts person.name # 输出 John Smith
puts person.age # 输出 25 person.name jane doe
puts person.name # 输出 Jane Doe person.age 30
puts person.age # 输出 30在上面的示例中定义了一个Person类它有两个属性name和age以及它们的setter方法。在name的setter方法中我们将传入的名称字符串转换为首字母大写的形式。在age的setter方法中我们将传入的字符串转换为整数。通过使用attr_accessor方法我们可以使用简洁的语法糖来访问和修改变量而不需要显式地定义getter和setter方法。
三、属性和attr_*方法体系
在Ruby中属性attributes是对象的实例变量instance variables它们是对象的内部状态用于存储对象的数据。属性在类中定义并且可以通过类的实例进行访问。
在Ruby中有多种方式来定义属性其中最常见的是使用attr_reader和attr_accessor方法体系。 1、attr_reader方法这个方法用于定义只读属性它防止通过实例对属性进行写操作只允许通过实例进行读操作。它接受一个或多个属性名称作为参数然后返回一个类型检查的访问器方法getter method来读取这些属性的值。
class Person attr_reader :name, :age
end person Person.new
person.name John # 报错name属性不可写
puts person.name # 输出 John2、attr_accessor方法这个方法用于定义可读可写属性它允许通过实例对属性进行读写操作。它接受一个或多个属性名称作为参数然后返回一个类型检查的访问器方法getter和setter方法来读取和修改变量的值。
class Person attr_accessor :name, :age def name(name) name name.capitalize end
end person Person.new
person.name John # 输出 John
puts person.name # 输出 John
person.age 25 # 输出 25
puts person.age # 输出 25使用attr_accessor方法定义的属性如果没有显式定义访问器方法getter和setter方法则默认只允许通过实例进行读操作。如果需要显式定义访问器方法则需要在定义属性后使用标准的getter和setter方法体系来定义它们。
四、继承和Ruby类层级结构
继承和Ruby的类层级结构紧密相关。在Ruby中类是一种第一级的对象这意味着你可以像其他对象一样创建和操作类。Ruby的类具有很多属性和方法其中之一就是继承。
继承是面向对象编程中的一个重要概念它允许我们在已有的类父类或超类的基础上创建新的类子类。子类继承并能使用父类的所有属性和方法同时还可以定义自己特有的属性和方法。
在Ruby中使用符号来定义一个类继承另一个类。例如
class Animal LivingThing # code specific to Animals
end这里Animal类继承了LivingThing类。这意味着Animal类可以访问LivingThing类的所有属性和方法同时还可以定义自己特有的属性和方法。
在Ruby中有几种类型的继承 1、单继承一个类只能继承自一个父类。如上述示例所示。 2、混入Mixin这是一种将模块module的功能添加到类中的方式。模块是可以包含方法和常量的命名代码块。
module AnimalFeatures def has_heartbeat true end
end class Animal LivingThing include AnimalFeatures
end这里Animal类不仅继承了LivingThing还混入了AnimalFeatures模块。 3. 多重继承在Ruby中一个类可以继承自多个父类。这是通过使用符号在类定义中一次引用多个父类来实现的。然而多重继承可能会导致一些复杂的问题特别是当不同的父类有同名的方法或属性时。
class Animal Creature # Animals code
end class Vehicle Creature # Vehicles code
end五、常量
在Ruby中常量Constant是程序中不会改变的值。Ruby中的常量具有全局作用域可以在程序的任何地方访问和修改。 在Ruby中常量定义使用全大写字母并且单词之间使用下划线_连接。例如下面是一个常量的定义
class MyClass # 定义一个常量 MY_CONSTANT Hello, World! def initialize # 在方法中使用常量 puts MY_CONSTANT end
end obj MyClass.new # 输出 Hello, World!