Ruby or Rails 学习总结 1

Qo_Tn


第一章 学习

1.1 Ruby

ruby 特性

弱类型 语言

1.3 下载安装Ruby 和 Rails

终端 命令 :

安装 rails gem install rails

1.4 开发工具 RubyMine

知了破解版

1.5 手动编译Ruby程序

终端 命令:

编译: ruby 路径+**
检查代码: ruby -c 文件名.rb
打开警告: ruby -w 文件名.rb
执行字面脚本:ruby -e 文件名.rb
在行模式下运行:ruby -l 文件名.rb

ruby -e 'print "Hello";print "Ruby"'
ruby -le 'print "Hello";print "Ruby"'

组合命令

-cw -le

1.6 实现计算器

puts "Please input Numberl:"
number1=gets
puts "Please input a operator(+,-,*,/):"
op=gets
puts "Please input Number2:"
number2=gets

case op.chomp
  when "+"
    result=number1.to_i+number2.to_i
  when "-"
    result=number1.to_i-number2.to_i
  when
    result=number1.to_i*number2.to_i
  when
    result=number1.to_i/number2.to_i
end

puts "Result:#{number1.chomp}#{op.chomp}#{number2.chomp}=#{result}"

第二章学习

2.1 常量的使用

定义方法(字母大写)

'常量名(大写)"='值'

相同名 警告错误,报错

例子:

PLANT=200
CORPSE=10                                       
puts "僵尸进攻一次,植物的生命是:"+(PLANT-CORPSE).to_s
$!

2.2 变量的使用

定义变量

局部变量必须以小写字母或者下划线开头
局部变量 有自己的作用域

例如:

class Test
  _info="我是在类中被定义的局部变量"
  puts _info
end

module ModelInfo
  _info="我是被定义的模块中的局部变量"
  puts _info
end

def info
  _info="我是被定义的方法中的局部变量"
  puts _tinfo
end

全局变量

  1. 作用于全局,任何地方都可以定义
  2. 可以在类中访问,也可以在方法中访问
  3. 全局变量以“$”开头

例如:

$info="我是被定义的全局变量,是最顶层的变量,我的Fans最多"

def infoQ
  tinfo="我是被定义的局部变量"
  puts tinfo
  puts $info
end

module ModelInfoQ
  _info="我是被定义的模块中的局部变量"
  puts _info
  puts $info
end

class TestQ
  _info="我是在类中被定义的局部变量"
  puts _info
  puts $info
end

puts $info  
全局变量 说明
$! 最近一次的错误信息
$@ 错误产生的位置
$_ gets最近读的字符串
$. 解释器最近读的行数
$& 最近一次与正则表达式佩佩的字符串
$~ 作为字表达式组的最近一次匹配
$n 最近匹配的第那个子表达式
$= 是否区分大小写的标志
$/ 输入记录分隔符
$\ 输出记录分隔符
$0 Ruby脚本文件名
$* 命令行参数
$$ 解释器进程ID
$? 最近一次执行的子进程退出状态

2.3 数据类型的使用

数据类型

三大数据类型 (数值型、范围、符号)

数值型:整数、浮点数

整数:Fixnum、Bignum

新版本 2的30次方不在区分 .class 统一打印 Integer

浮点型

带有小数点的字符串,例如:f=3.12c

范围 ('..' 或 '...')

a..b 或 a....b

a..b 定义的是从值a到值b的范围,包括值a,值b以及值a,值b中间的值
a...b 定义的是从值a到值b的范围,包括值a,以及值a,值b中间的值,但不包括值b
Ruby 中,范围是一个对象,是Range类的实例。

迭代器(regect、select、each)

regect:
将该范围转换成一个数组,并删除掉满足条件的元素。
select:
将该范围转换成一个数组,只选择满足条件的元素。
each:
输出迭代范围中的每个元素。

符号

符号也是一个对象.
符号对象是一个字符串,一个方法,一个类或者一个标识符的内部表示形式。
创建符号对象就在对象名前面加上一个冒号':'就可以了。
只要对象名相同,则产生的符号对象就相同。
字符串和符号对象之间是一一对应的。
字符串和符号对象就可以通过to_s和to_sym来进行相互转换。

例如:

dcy="我是你的忠实粉丝啊"
ly=:"我是你的忠实粉丝啊" 
puts dcy.to_sym==ly 
puts ly.to_s==dcy   
返回:
true
true

符号对象还可以用 %s{表示法} 来创建

例如

dcy="我是你的忠实粉丝啊"
ly=:dcy
dcyandly=%s{dcy}
puts ly==dcyandly
返回 true

2.4 算术运算符和赋值运算符

算数运算符

全局变量 说明 计算 结果
+ 加号 Z=2+1 Z的结果是:3
- 减号 Z=2-1 Z的结果是:1
* 乘号 Z=2*3 Z的结果是:6
/ 除号 Z=6/3 Z的结果是:2
% 求余 Z=5%2 Z的结果是:1
** 乘方运算 Z=5**2 Z的结果是:25

赋值运算符

运算符 |   说明  |   计算  |   结果   |

----------|:----------:|----------|----------|
= | 赋值 | Z=1 | Z的结果是:1 |
+= | 加法赋值 | Z=1, Z+=1 | Z的结果是:2 |
-= | 减法赋值 | Z=3, Z-=1 | Z的结果是:2 |
*= | 乘法赋值 | Z=2, Z*=3 | Z的结果是:6 |
/= | 除法赋值 | Z=7, Z/=3 | Z的结果是:2 |
%= | 求余赋值 | Z=2, Z%=2 | Z的结果是:0 |
**= | 乘方赋值 | Z=2, Z**=2 | Z的结果是:4 |

2.5 位运算符的使用

位运算符

首先将十进制的数字转换成二进制,然后才能进行按位运算。
位运算符是对整数数组的位进行逻辑运算。

位运算符 说明 计算 结果
& 按位"与" Z=10&12 Z的结果是:8
^ 按位"异或" Z=10^12 Z的结果是:6
按位"或" Z=10 12 Z的结果是:14
~ 按位"非" Z=~10 Z的结果是:-11
<< 按位向左移位 Z=12<<2 Z的结果是:48
>> 按位向右移位 Z=10>>2 Z的结果是:2

除了“~”是单目运算符,即需要一个操作数,而其他的都是双运算符,即需要两个操作数。

2.6 比较运算符和逻辑运算符

比较运算符

比较运算符 说明
> 大于
< 小于
<= 小于或者等于
>= 大于或者等于
== 等于
!= 不等于
<=> 比较两个对象,分别返回1,0和-1
=== 当普通对象处于运算符的左边时,该运算符与“==”功能相同; 但左边的对象是一个Range对象,且右边对象包还在该Range内时,返回true,否则返回false
=~ 正则表达式匹配
!~ 正则表达式不匹配

逻辑运算符

逻辑运算符 说明
and 按位"与"
or 按位"异或"
not 按位"或"
&& 逻辑"且"
| 逻辑"或"
! 逻辑"非"

2.7 三目运算符的使用

第一个操作数为条件,如果第一个操作数成立,则返回一个值,否则返回另一个值。

例子:condition?true_value:false_value

2.8 表达式的返回值

表达式是由数字、运算符、数字分组符号(括号)、自由变量和约束变量等排在一起来求数值的组合。
在Ruby语言中,常量、变量、各种字面值、相关计算、if或者while等控制语句、类和方法的定义都可以称为是表达式。
表达式的返回值无非就是有两种: 一种是有返回值的,另一种是无返回值的。

例:

score=569
res=if score>600
      score.to_s+"考上复旦没问题"
    else
      score.to_s+"分,我很惭愧,我落榜了!"
    end
puts res

例2:

score1=596
res=while score1<600
      puts "我的分数差"+score.to_s+"不到六百"
      score+=1
    end
puts res+"的值"

2.9 并行赋值和嵌套赋值

  1. 并行赋值

    • 交换两个变量值,无需第三个变量。
    • 两边变量、值不等同,多余的会被设置为nil或忽略
    • 左边以*为前缀, 表示所有对应该变量的值以及后面的值将会组成一个数组,并赋给这个变量。
    • 右边以*为前缀, 则会将这个数组拆开,按元素的相应位置进行并行赋值。
      例如:
    c,d="我是变量c","我是变量d"
    puts "交换前的变量c"+c,"交换后的变量d"+d
    c,d=d,c
    puts "交换后的变量c"+c,"交换后的变量d"+d
    
    tianqi=["春天","夏天","秋天","冬天"] #(创建的数组)
    daibiao=["cyr代表温暖的春天(77·F)","wdc代表炎热的夏天(99`F)","wz代表凉爽的秋天(59·F)","yyl代表冷酷冬天(41·F)"]
    a,b=tianqi
    puts "a代表的是"+a,"b代表的是"+b
    a,*b=daibiao
    puts "a代表的是"+a+"\n数组b代表的是",b
    a,b="风雨哈佛路",*tianqi
    puts a,b
    
  2. 嵌套赋值

    • 把左边的一些变量用括号括起来,形成一个变量列表;与之对应的右边的值用中括号括起来形成一个子并行赋值的列表。

    例如:

    tianqi=["春天","夏天","秋天","冬天"]
    b,(c,d),e=tianqi
    puts "输出的b是"+b.to_s,"输出的c是"+c.to_s,"输出的d是"+d.to_s,"输出的e是"+e.to_s
    b,(c,*d),e="春天",["夏天","不冷不热天","秋天"],"冬天"
    puts "b="+b.to_s,"c="+c.to_s,d,"e="+e.to_s
    

2.10 条件语句

  1. 条件语句

    • if (条件) then 代码块1 elseif (条件n) 代码块n else 代码块n+1 end
    • if 修饰语句
      例如:
    str=1
    if (str==1)
        puts "1月代表的是春天: 花香鸟语飘满村。细听来,句句是乡音。"
    end
    
    month=2
    mothinfo="春天"
    if (month<3)
    puts "2月份是:"+mothInfo
    
    • unless 如果...不,除非,除...之外 的意思。
    • unless (条件) then 代码块1 else 代码块2 end
    a=2
    unless a**5==32 then
        puts "a的5次方不是32"
    else
        puts "a的5次方是32" 
    end
    
    • case语句
    case 表达式        
        when 常量1,常量2...常量3 then
    代码块1  
        when 常量4,常量5...常量n then    
    代码块2        
    else    
    代码块3   
    end                 
    
    num=6
    case num    
        when 6
        puts "今天是周末"
        else
            puts "今天不是周末"
    end
    
    month=6
    case month
        when 1,2,3
            puts "春意盎然"
        when 4,5,6
            puts "烈日骄阳"
        when 7,8,9
            puts "秋高气爽"
        when 10,11,12
            puts "冬雪棉被"
        else
            puts "该月份已超出程序可以计算的范围"
    end
    

2.11 循环语句

  1. while 循环语句

    • while (条件) do 代码块 end
    row=1
    while (row<=9) do
        row=row+1
        puts "第"+(row-1).to_s+"次被打印的是:"+row.to_s
    end
    
  2. until 循环语句

    • 与while 语句作用相反
    row=0
    flh=["红儿","橙儿","黄儿","绿儿","青儿","蓝儿","紫儿"]
    until (row>=7) do
        flh.each do |h|
            row=row+1
            puts "王母娘娘的第"+row.to_s+"个女儿的名字是:"+h.to_s
        end
    end 
    
  3. for...in 循环语句

    • for 自定义名称 in Array|Hash do 代码块1 end
    • for...in 语句主要是遍历数组和Hash对象的元素
    shiren=["蒹葭苍苍","白露为霜","所谓伊人","在水一方","乘兴见之","脸胖且长","乘兴会之","腰如水缸"]#创建数组
    for shiju in shiren do
        puts shiju
    end
    
  4. 迭代器

    • 主要用于将数组、Hash对象和普通对象的变量进行迭代输出。
    • array.each do |定义的变量名| 代码块 end
      例如:
    names=["琵琶语","东风破","小酒窝","擦身而过"]
    names.each do |name|
        puts name
    end 
    
  5. loop

    • loop 是一个最基本的迭代器,使用loop语句可以执行循环功能,但是必须注意的是: 使用loop语句进行循环时,程序会无限次的循环指定的代码,因此必须使用break语句来结束这个循环。

2.12 跳转语句

  1. break、next、redo、return
    • break 跳出整个循环,嵌套中跳出嵌套(一层)
    • next 结束循环语句,next只终止当前的循环,进行下一个循环
    • redo 类似于next,不同的是,使用redo 语句,不用检查循环条件是否成立,就执行下一次循环。
    • return 用来结束循环语句,但是return 主要用来结束一个方法,并且针对这个方法有返回值。
例如: 

```
i=0
loop{
    puts "i的值是"+i.to_s
    i+=1
    if (i>=3)
        break
    end
}
puts "--------------------------------------------------------------"
music=1
while (music<=5) do
    if (music==5)
        music+=1
        next
    end
    puts "《简爱》这首歌曲已循环播放了"+music.to_s+"次"
    music+=1
    yinyue=1
    while (yinyue<=3) do
        if (yinyue==2) 
            yinyue+=1
            next
        end
        puts "《曲终人散》这首音乐已经循环播放了"+yinyue.to_s+"次"
        yinyue+=1
    end
end
puts "--------------------------------------------------------------"
i=1
while (i<=5) do
    if (i==5)
        i+=1
        redo
    end
    puts "这是第"+i.to_s+"次循环"
    i+=1    
end
puts "--------------------------------------------------------------"

def search(weatherName)
    weathers=["春天","夏天","秋天","冬天"]
    for weather in weathers do
        puts weather
        if (weather==weatherName) then
            return true
        else
            return false
        end
       end
end
if search("春天") then
    puts "这个月的天气是春天"
else
    puts "这个月的天气不是春天"
end

```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • Qo_Tn 第三章学习 3.1 创建字符串 String:单引号或双引号 创建。单引号字符串 只能进行最少替换。双...
    Qo_Tn阅读 101评论 0 0
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,323评论 0 2
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,732评论 2 9
  • 学习C语言程序设计都会用到高等数学知识和计算机基础理论知识。 使用可变参数应该有以下步骤: 1)首先在函数里定义一...
    皓小天阅读 5,759评论 0 2
  • 最近终于把《云边小卖部》看完了,不知道是年龄越来越大了还是泪点太低,从王莹莹生病到她去世,我一直哭到结尾。像王莺莺...
    思宇Anne阅读 314评论 2 2