`

Ruby 学习笔记

    博客分类:
  • 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}"
end


2.6块 和 迭代器
单行的Block使用花括号,多行的block使用do end

如果方法有参数,他们出现在block之前

verbose_greet("Dave","loyal customer") {puts "hi"}

yield 语句,可以一次或者多次调用相关联的block

1.9.3-p125 :031 >   def call_block
1.9.3-p125 :032?>   puts "start of method"
1.9.3-p125 :033?>   yield
1.9.3-p125 :034?>   yield
1.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 = gets
print line

=================

3.类 对象 变量
歌曲 <名,演唱者,时长>

1.9.3-p125 :054 > class Song
1.9.3-p125 :055?>   def initialize(name, artist, duration)
1.9.3-p125 :056?>     @name =name
1.9.3-p125 :057?>     @artist = artist
1.9.3-p125 :058?>     @duration = duration
1.9.3-p125 :059?>     end
1.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 Song
1.9.3-p125 :065?>   def to_s
1.9.3-p125 :066?>     "Song :#@name --#@artist -- #@duration"
1.9.3-p125 :067?>     end
1.9.3-p125 :068?>   end
===================================================================================================

3.1继承 和 消息

继承允许 一个类 是另一个类的特化,specialization

举例说明的是卡拉OK,卡拉OK 歌曲与其他的歌曲并没有两样(没有主唱的音轨),外加歌词和时间信息,

新类 KaraokeSong,在Song基础上加歌词

定义如下:
1.9.3-p125 :081 > class KaraokeSong <Song
1.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 = lyrics
1.9.3-p125 :085?>     end
1.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
@name
end

def artist
@artist
end

def duration
@duration
end

另外方法是attr_reader
class Song
attr_reader :name, :artist, :duration
end

attr_reader是ruby的一个方法, :name(Symbol)是参数,



3.2.1可写的属性

访问对象的属性 ,访问其他的变量
= 完成赋值


==================================================

Virtual Attibutes

3.2.3 Attributes,Instance Variables, and Methods
==============================================
3.3.1 Class Variables 类变量

以下面的为例,@@plays是类变量。
重要的一点是,类变量被类的所有对象所共享 ,与类中的方法相关联;一个类,类变量只存在一份拷贝,@@标识;类变量在使用之前必须初始化.
以之前的点唱机为例,要记录每首歌被播放的次数,如果使用实例变量来记录,一首歌被播放时,实例中的值相应的增加。但是如果要统计总共播放了多少首歌?如何实现?
1.统计所有Song 对象,累加他们各自的播放次数
2.使用全局变量来记录,虽然此方法不太可取
3.使用类变量(记得初始化哦)
class Song
@@plays = 0
def initialize(name, artist, duration)
@name =name
@artist = artist
@duration = duration
@plays = 0
end
attr_reader :name, :artist, :duration, :plays

def duration=(new_duration)
@duration = new_duration
end
def duratioon_in_minutes
@duration/60.0
end
def duration_in_minutes=(new_duration)
@duration = (new_duration*60).to_i
end

def to_s
  "Song :--------- #@name----#@artist ----(#@duration) "
end

def play
@plays += 1
@@plays += 1
p "this song : #@plays plays .Total #@@plays plays"
end
end

class KaraokeSong < Song
def initialize(name, artist, duration, lyrics)
super(name, artist, duration)
@lyrics = lyrics
end
def to_s
super + " [ #@lyrics ]"
end
end



================================================
3.3.2 Class Methods

Class Methods
类方法 ,使用方式是在方法名前 加入"类."
例如
class Example
def instance_method
end
def Example.class_method
end
end

举例说明(还是以处理之前Song变量为例),
重新定义一个类,SongList用来处理Song对象是否超时,如果超时则返回True,设定时间为300秒

class SongList
MAX_TIME = 5*60
def SongList.is_too_long(song)  //形参是Song的对象
return song.duration > MAX_TIME
end

end

调用的时候,直接使用SongList.is_too_long(song1),传入了一个Song类的一个对象(是我自己之前的C++底子太薄弱了,还是咋了,感觉这地方很新奇,灰常强大呀) 





















分享到:
评论

相关推荐

    Ruby学习笔记

    这个暑假回家没事干闲...恩,废话就少提,下面我学习Ruby的各个部分。其中Ruby风格这一部分是开放的,因为我暂时还没有形成自己的风格。我用xmind来记笔记,因此我只是把笔记搬到博客上,看看下面的图。好有爱啊!!!

    Ruby学习笔记(学习心得)

    Ruby学习笔记 01 类的属性与方法 02 访问控制 03 Container(Array/Hash) 04 Iterator 05 简单数据类型 06 范围 07 方法 08 条件控制 09 异常处理

    rubyinstaller-devkit-3.0.2-1-x64 and Ruby 学习笔记.7z

    Ruby是一种面向对象的脚本语言,它以其简洁、优雅的语法和强大的功能而闻名。...通过安装Ruby和DevKit,你可以轻松地编写、编译和运行Ruby代码,同时结合学习笔记,可以深入理解Ruby语言及其生态系统。

    ruby学习笔记

    ruby基础笔记,自学笔记,ruby基础语法非常全面ruby基础笔记,自学笔记,ruby基础语法非常全面

    RubyStudy-master-ruby学习笔记

    学习 Ruby 的旅程即将开始! Ruby 是一种功能强大、灵活的编程语言,广泛应用于 Web 开发、脚本编写和系统管理等领域。下面是学习 Ruby 的一些实用建议:首先,了解 Ruby 的基本概念和语法。 Ruby 是一种面向对象的...

    个人ruby学习笔记

    从给定的文件信息中,我们可以提炼出一系列关于Ruby编程语言的重要知识点,涵盖基础语法、变量类型、...以上总结了Ruby的一些基础知识点,这些内容对于初学者掌握Ruby编程语言至关重要,同时也是进一步深入学习的基石。

    精华ruby学习笔记和代码

    这个笔记里包含了ruby的整型,字符串,浮点数,布尔等基础数据类型,还有数组,哈希hash的用法, 类的定义,函数方法,以及对象定义,其他高级用法解释,除了笔记记录的语法糖之外,还包含了一些解释性的代码,帮助...

    学习Ruby的笔记以及Demo源码.zip

    学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及...

    学习 Ruby 的笔记以及 Demo(简介、语言特性、应用场景、Ruby 注释、Ruby 文件的构造与析构语句Ruby 变量等)

    Ruby 学习笔记 1、简介 定义:一种简单快捷的面向对象脚本语言 开发者:松本行弘 开发时间:1995年 设计目的:A PROGRAMMER'S BEST FRIEND【程序员的最佳朋友】 文件扩展名:rb 2、语言特性 真正的面向对象编程语言 ...

    Ruby学习笔记一

    笔记: Ruby会默认返回方法中的最后一个值。 如果需要返回多个值,可以用数组来实现。 可以通过强制声明return来返回值。 基础的输出方法是用puts(输出一行),print(直接打印)。 基础的输入方法是gets(读入一行,...

    ruby 学习笔记(2) 类的基本使用

    ruby语言跟c#的一些重要差别在于: 1.ruby是动态语言,c#是静态语言–即对象在new出来以后,ruby还可以动态... …其它地方,等学习深入了再写出来 最后上一段测试代码,展示了ruby中类的基本用法: 代码如下: class Peop

    Ruby学习笔记之gem 命令详解

    这篇学习笔记将详细介绍 `gem` 命令及其相关工具,如 RVM (Ruby Version Manager) 的使用。 首先,我们通过 `ruby -v` 命令来查看当前系统中安装的 Ruby 版本。这有助于确保我们正在使用的是正确的版本。如果需要...

    ruby 学习笔记(1) 初识语法

    单从技术而言,ruby本身确实很爽,令程序员的工作变得轻松有趣! 下面的代码演示了如何找出100以内的素数: 代码如下: using System; namespace Mersenne { class Program { static void Main(string[] args) { for ...

    ruby笔记1ruby笔记1ruby笔记1

    标题中的"ruby笔记1ruby笔记1ruby笔记1"暗示了这是一份关于Ruby编程语言的学习笔记,可能包含了作者在学习过程中的重点、难点以及心得体验。描述中的内容重复了标题,进一步强调了这是关于Ruby的深入学习记录。标签...

    学习 Ruby 的笔记以及 Demo.zip

    本资源“学习 Ruby 的笔记以及 Demo.zip”显然包含了关于Ruby编程的学习资料和一些实际示例代码,旨在帮助初学者理解并掌握Ruby的基础及进阶特性。 首先,让我们深入了解一下Ruby的核心特性: 1. 面向对象:Ruby是...

    ruby编程学习笔记及demo

    Ruby是一种纯粹的面向对象编程语言。它由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)创建于1993年。 您可以在 www.ruby-lang.org 的 Ruby 邮件列表上找到松本行弘(まつもとゆきひろ/Yukihiro ...

    Ruby自学笔记

    以上是Ruby自学笔记中提及的关键知识点的详细解读,如果要学好Ruby语言,深入理解这些基础知识是非常必要的。Ruby语言的这些特性与规则构成了其独特的编程范式,使得它在动态语言领域中占有一席之地。

Global site tag (gtag.js) - Google Analytics