Ruby 学习笔记

学习笔记has_many :line_items ,一个购物车中回存在多个items,他们都链接到购物车,因为每一行订单都包含了一个到它的购物车的链接(指向cart_id); :dependent => :destroy表明,当删除父对象时,所有与被删除的父记录存在外键关联的记录,回逐渐删除~匹配时间/\d\d:\d\d:\d\d/匹配时间/Perl.*Python/ Perl然后是零个或是多个字符/Perl *Python//Perl +Pyhon/一个或者是多个空格/Perl\s+Python/ Perl 空格字符怎么样利用好模式=~ 利用好模式 ,返回模式开始的位置,否则返回nil ,if line =~ /Perl|Python/ puts “Scri ~~~~ :#{line}”end2.6块 和 迭代器单行的Block使用花括号,多行的block使用do end如果方法有参数,他们出现在block之前verbose_greet(“Dave”,”loyal customer”) {puts “hi”}yield 语句,可以一次或者多次调用相关联的block 1.9.3-p125 :031 > def call_block1.9.3-p125 :032?> puts “start of method”1.9.3-p125 :033?> yield1.9.3-p125 :034?> yield1.9.3-p125 :035?> puts “End of method”1.9.3-p125 :036?> end => nil 1.9.3-p125 :037 > call_block { puts “In the block” }block应用于数组.==================================2.7读/写文件使用gets获取键盘的输入,print输出line = getsprint line=================3.类 对象 变量歌曲 <名,演唱者,时长>1.9.3-p125 :054 > class Song1.9.3-p125 :055?> def initialize(name, artist, duration)1.9.3-p125 :056?> @name =name1.9.3-p125 :057?> @artist = artist1.9.3-p125 :058?> @duration = duration1.9.3-p125 :059?> end1.9.3-p125 :060?> end => nil 实例变量 @开头, 使用下面的.to_s 只是报告了对象ID ,Ruby中的类永远不封闭:你总是可以向一个已有的类中添加方法.对自己编写的类和标准的内建类 都适用1.9.3-p125 :061 > song = Song.new(“Bicyclops”, “Fleck”,260) => #<Song:0x000000018e3f18 @name=”Bicyclops”, @artist=”Fleck”, @duration=260> 1.9.3-p125 :062 > song.inspect => “#<Song:0x000000018e3f18 @name=\”Bicyclops\”, @artist=\”Fleck\”, @duration=260>” 1.9.3-p125 :063 > song.to_s => “#<Song:0x000000018e3f18>” 将.to_s的方法重写1.9.3-p125 :064 > class Song1.9.3-p125 :065?> def to_s1.9.3-p125 :066?> “Song :#@name –#@artist — #@duration”1.9.3-p125 :067?> end1.9.3-p125 :068?> end===================================================================================================3.1继承 和 消息继承允许 一个类 是另一个类的特化,specialization举例说明的是卡拉OK,卡拉OK 歌曲与其他的歌曲并没有两样(没有主唱的音轨),外加歌词和时间信息,新类 KaraokeSong,在Song基础上加歌词定义如下:1.9.3-p125 :081 > class KaraokeSong <Song1.9.3-p125 :082?> def initialize(name, artist, duration, lyrics)1.9.3-p125 :083?> super(name, artist, duration)1.9.3-p125 :084?> @lyrics = lyrics1.9.3-p125 :085?> end1.9.3-p125 :086?> end => nil < Song 子类的描述符(subclass),Song是KaraokeSong的超类(superclass),父子关系.当Ruby遇到方法调用时,先查看song所属的类(KaraokeSong)是否有实现消息名称相同的方法,如果有则执行,否则将执行父类的方法向song ,即KaraokeSong类的一个对象发送消息to_s~~我们通过让每个类处理其自身实现细节的方法来解决此问题.当调用KaraokeSong.to_s时,调用其父类的to_s获得歌曲的细节,之后将歌词的信息添加上去,返回结果,细节如下~=========3.2 对象和属性 objects and Attributes一个对象的外部可见部分被称之为属性attribute添加如下的方法,可访问到具体的属性def name@nameenddef artist@artistenddef duration@durationend另外方法是attr_readerclass Songattr_reader :name, :artist, :durationendattr_reader是ruby的一个方法, :name(Symbol)是参数,3.2.1可写的属性访问对象的属性 ,访问其他的变量= 完成赋值==================================================Virtual Attibutes3.2.3 Attributes,Instance Variables, and Methods==============================================3.3.1 Class Variables 类变量以下面的为例,@@plays是类变量。重要的一点是,类变量被类的所有对象所共享 ,与类中的方法相关联;一个类,类变量只存在一份拷贝,@@标识;类变量在使用之前必须初始化.以之前的点唱机为例,要记录每首歌被播放的次数,如果使用实例变量来记录,一首歌被播放时,实例中的值相应的增加。但是如果要统计总共播放了多少首歌?如何实现?1.统计所有Song 对象,累加他们各自的播放次数2.使用全局变量来记录,虽然此方法不太可取3.使用类变量(记得初始化哦)class Song@@plays = 0def initialize(name, artist, duration)@name =name@artist = artist@duration = duration@plays = 0endattr_reader :name, :artist, :duration, :playsdef duration=(new_duration) @duration = new_duration enddef duratioon_in_minutes@duration/60.0enddef duration_in_minutes=(new_duration)@duration = (new_duration*60).to_i enddef to_s “Song :——— #@name—-#@artist —-(#@duration) “enddef play @plays += 1@@plays += 1p “this song : #@plays plays .Total #@@plays plays”endendclass KaraokeSong < Songdef initialize(name, artist, duration, lyrics)super(name, artist, duration)@lyrics = lyricsend def to_s super + ” [ #@lyrics ]” endend================================================3.3.2 Class MethodsClass Methods类方法 ,使用方式是在方法名前 加入”类.”例如class Exampledef instance_methodenddef Example.class_methodendend举例说明(还是以处理之前Song变量为例),重新定义一个类,SongList用来处理Song对象是否超时,如果超时则返回True,设定时间为300秒class SongListMAX_TIME = 5*60def SongList.is_too_long(song) //形参是Song的对象return song.duration > MAX_TIME endend调用的时候,直接使用SongList.is_too_long(song1),传入了一个Song类的一个对象(是我自己之前的C++底子太薄弱了,还是咋了,感觉这地方很新奇,灰常强大呀) 坐在外婆的沙滩,看最白的帆影。

Ruby  学习笔记

相关文章:

你感兴趣的文章:

标签云: