Ruby基础学习笔记

2019-10-20  本文已影响0人  韩宝亿

目录

Ruby的基本概念

Ruby的控制语句

Ruby的循环

Ruby的数组与散列

Ruby的基本概念

运行Ruby的方式

变量

Ruby默认没有闭包

a = 1
def f1
 p a
end
fi() #括号可以省略
#报错:a不存在

闭包是指函数可以使用外部的自由变量
没有闭包是指函数不可以使用外部的自由变量
用Ruby其他语法可以实现闭包

常量

全大写:RUBY_VERSION/ARGV

A = 1
def f1
 p A
end
f1 #1

多重赋值(JavaScript里叫做析构赋值)

a,b,c = 1,2,3
a,b,*c = 1,2,3,4,5
a,*b,c = 1,2,3,4,5
a,b = b,a
arr = [1,2]
a,b = arr #a=1,b=2

字符串

puts '12\n34' #单引号不会转义

puts "12\n34" #双引号会把\n转义成换行

puts <<eos
 12
 34
 56
eos

log

print('a', 'b')-默认不加换行
puts('a', 'b')-默认每个加换行
p('a', 'b')-加换行,不转义,并且会直观的看出数据类型
只要没有歧义,括号()都可以省略

程序员一般使用 p
日志里一般使用 puts 和 print

注释

#这是单行注释
#这是第二行注释

=begin
多行注释
=end

Ruby的控制语句

Ruby的if语句

if a > 3 then p 'big' end

if a > 3 then p 'big' else p 'small' end  #ruby的if语句是有值的

p(if a > 3 then 'big' else p 'small' end) 

p(if a > 4
 'big'
elsif a > 2  #else if 在 ruby 里要写成 elsif
 'middle'
else
 'samll'
end)

Ruby的if语句2

b = if a > 3 then 'big' else 'samll' end
b = a > 3 ? 'big' : 'small'

return if error
return unless success  # unless 和 if 是反逻辑

case语句(相当于JavaScript的switch case)

z = case x
    when 1
     '1'
    when 2,3
     '2 or 3'
    else
     'others'
    end  

Ruby的循环

.times方法
for 关键字
while 关键字
until 关键字
.each方法
loop 关键字

.times方法

7.times do 
  p 'one time'
end  
或者
7.times {p 'one time'}
  • .times是一个函数
  • do...end是代码块
  • {...}也是代码块
  • 一般多行用do...end 单行用{...}
  • 代码块作为.time函数的参数
  • ruby的函数调用可以省略()
7.times do |i|
  p "#{i+1} 次"  #这里必须使用双引号,否则不会转义,相当于JS的${i}
end
或者
7.times { |i|
  p "#{i+1} 次"
}
两个代码都可以写成一行:
7.times do |i| p "#{i+1} 次" end
7.times { |i| p "#{i+1} 次"}

.each方法

name = ['hanbaoyi', 'hby']
name.each do |name|
 p name
end

name.each { |name| p name }

(1...7).each do |i| #1...7是一个Range,可以用(1...7).class打印出来
 p i
end

(1...7).each { |i| p i }

for关键字

while/until关键字

loop关键字

上面的代码会一直无限循环,除非在里面写break

跳出循环

break 表示退出所以循环
next 表示退出当前循环,进入下一次循环
对于JavaScript里的 breakcontinue

Ruby的数组与散列

Ruby中的数据类型

整数-Integer对象/Numeric对象
浮点数-Float对象
字符串-String对象
数组-Array对象
正则表达式-Regexp对象
文件-File对象
符号-Symbol对象
异常-Exception对象
散列-Hash对象

每个对象都有一个object_id属性,表示其唯一性
如: a.object_id a.equal? b

数组

由Array类构造出来的对象
[1,2].class #Array

mixed = [1,2,'a','b','3']
mixed.size #相当于写mixed.size()
=>5
mixed.methods
打印出mixed的所有方法,注意这些方法都是以:冒号开头的,这是symbol

散列

由Hash类构造出来的对象

上面的nameage不是字符串,而是symbol
等价于person = {:name=>'hby', :age=>18}
person.keys
=>[:name,:age]
如果想要字符串作为key,应该写成
person = {'name'=>'hby','age'=>18}

你可以认为symbol是轻量级的字符串,功能更少
:name.to_s得到字符串,'name'.to_sym得到符号

遍历散列

person.each do |key,value|
 p "key: #{key}, value: #{value}"
end
#输出时,symbol会自动变成string

与JavaScript的区别

person = {name: 'hby', age: 18},如果你想要获取'hby'

与JavaScript的区别2

def say_hi
 p 'hi'
end
person = {name: 'hby', age: 18}
如果你想要给person加一个方法/函数

因为say_hi等价于say_hi()
say_hi 的返回值为 p 'hi' 的返回值,也就是'hi'
所以相当于 person[:say_hi] = 'hi'

person[:say_hi] = lambda{p 'hi'}
person[:say_hi].call() #括号()可以省略

推荐的一些学习资源

过于简单,适合新手

devdocs.io 建议学习的时候查
apidock.com/ruby 建议做项目的时候查,更全面

《Ruby基础教程》很基础,看起来很慢
《Ruby元编程》高级教程,等你熟悉Rails之后再考虑看

上一篇 下一篇

猜你喜欢

热点阅读