博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ruby基础笔记
阅读量:4615 次
发布时间:2019-06-09

本文共 3040 字,大约阅读时间需要 10 分钟。

代码文件编码

.rb使用utf-8编码
#encoding: utf-8

基本类型

数字
Fixnum 可以容纳比本机字节长度少一位
Bignum 仅收到内存限制

进制前缀

0 八进制
0d 十进制
0x 十六进制
0b 二进制

在ASCII字符前面加?可以得到对应的字符数值

浮点数 基本不分float 带小数点就是浮点数

字符串

''不进行替换
""可以进行#{v}的替换

\a bell/alert

\b backspace
\e escape
\f
\n newline
\r return
\s space
\t tab
\v vertical tab

正则表达式
/pattern/
/pattern/option
%r{pattern}
%r{pattern}options
Regexp.new{'pattern'[, option]}

命名规则

ruby 使用一种命名他管理来区分名称的用途: 名称的第一个字符显示这个名称如何被使用
局部变量 方法参数和方法名称都必须以小写字母或者下划线开始 rails中使用了小写字母开头
全局变量使用美元符号($)为前缀
实例变量使用@开始
类变量使用2个@符号开始(静态变量???)
最后类名称,模块名称和常量都必须以一个大写字母开始

puts "sdfsdf"

puts作用的副作用,会先在目前的屏幕上打印出来,之后才返回字符串常量值
puts会在输出字符串之后添加一个"\n"

print 之上两点都不会

字符串方法

"".empty? 测试字符串是否为空

所有的object包括函数都可以调用to_s方法,包括nil,来返回一个字符串

nil.to_s

""
nil.to_s.empty?
true

测试一个对象是否为空nil?

"foo".nil?
false
"".nil?
false

nil.nil?

true

基本上所有ruby的对象的布尔值都是真 ,只有nil是false
包括0也是真
if 0
true
else
false
end
true

数组常用方法
a.sort
a.sort! bang改变了数组的内部数据
a.shuffle
a.reverse

"foo bar a".split

["foo", "bar", "a"]

"fooxbarxa".split('x')

["foo", "bar", "a"]

a=[42, 8, 17 ,7, "foo", "bar"]

a.join
"428177foobar"

a.join(',')

"42,8,17,7,foo,bar"

range 和 数组
(0..9).to_a 由range生成一个数组 包括9
(0...9).to_a 由range生成一个数组 不包括9

a=%w[foo bar baz quux] #创建一个元素为字符串的数组

["foo", "bar", "baz", "quux"]

('a'..'e').to_a

["a", "b", ... "e"]

block

(1..5).each do |number| #针对range
puts 2* number
puts '--'
end
其中 do ~ end之间就是一个block 它接受|number|作为传入的参数 之后做puts的操作

3.times { puts "abc" } #针对单个次数

其中{}就是一个block
默认单行block就使用{} 多行的话就使用do end 并且{}优先级较高

(1..5).map { |i| i**2 } #针对range或者数组

1 def call_back 2     yield 3     yield 4 end 5 def call_back 6     yield 7     yield 8 end 9 10 call_back { puts "in block"}11 call_back { |i| print "#{i}\n" }

 

hash 和 symbol

h1 = { :name => "abc", :email => "xxx@gmail.com"}
h2 = { name : "abc", email: => "xxx@gmail.com"} #新形式,逐渐推荐使用
h1 == h2
true
其中 :name 叫做symbol 可以看做是一个没有约束的字符串,symbol当比较的时候,不需像字符串一样逐个字符进行比较,所以是hash的key的不二选择

flash = { success:"it works!", error:"it failed"}
flash.each do |key, value| #调用了hash的each方法
puts "key #{key.inspect} has value #{value.inspect}"
end

inspect 返回一个数组的字符形式

puts (1..5).to_a
1
2
3
4
5

puts (1..5).to_a.inspect

[1,2,3,4,5]

因为inspect输出对象的方式经常使用,为此还有一个专门的快捷方式 p

p :name #等价于 puts:name.inspect
:name

s="foobar" #默认构造函数调用
s.class #返回类的类型
String

s = String.new("foobar") #使用类名.new来生成一个类

"foobar"
s.class
String
s == "foobar"
true

a = Array.new([1,3,2])

[1,3,2]

h = Hash.new #注意hash如果给new函数参数,则这个参数的值是给未初始值得默认值

{}
h[:foo]

h = Hash.new(0)

{}
h[:foo]
0 #初始值的默认值变成了0

mass assignment

mixin

module Trig
PI = 3.14 #模块中定义常量
def Trig.sin(x) #模块中定义函数
end
def Trig.cos(x)
end
end

使用

require 'trig'
y=Trig.sin(xxxxz)
mix in
使用sha256保存密码
salt = Array.new(10){ rand(1024).to_s(36) }.join
hashed_password=Digest::SHA256.hexdigest(pass+salt)

ruby的自省

程序能够在程序内部检查程序自己的方方面面,这种能力叫做反射 也叫内省
在内省的时候可能发现如下信息
包含哪些对象
类的层次结构
对象的属性和方法
有关方法的信息

irb中直接load example.rb

然后可以直接调用example.rb中的方法

Symbol和String的互转

String#to_sym() String#intern()
Symbol#to_s() Symbol#id2name()

异常处理

begin
rescue e
#失败时候抛出异常e
ensure
#此处无论成功失败都执行
end

转载于:https://www.cnblogs.com/AssassinPig/p/3843914.html

你可能感兴趣的文章
新的开始
查看>>
Linux LVM逻辑卷配置过程详解
查看>>
2034 人见人爱A-B
查看>>
hdu 5256 序列变换(LIS最长上升子序列)
查看>>
[源码解析]HashMap和HashTable的区别(源码分析解读)
查看>>
oracle rollup()
查看>>
Java之JSON操作(Jackson)
查看>>
设置UITextView根据内容动态设置高度的简单方法,类似微信发朋友圈时的文本输入效果实现...
查看>>
C语言对文件的操作函数用法详解2
查看>>
挂载共享文件夹
查看>>
Python exe2shellcode,shellcode2exe
查看>>
ASP.NET MVC 3: Razor中的@:和语法
查看>>
二级标题左侧加粗线条
查看>>
LeetCode 970. Powerful Integers (强整数)
查看>>
linux内核里的字符串转换 ,链表操作常用函数(转)
查看>>
解决因删除app唯一标识设备号改变情况(存储到钥匙串中)
查看>>
iOS中使用Fastlane实现自动化打包和发布
查看>>
C++ primer 第八章笔记
查看>>
使用Harbor+Auzre IOT Edge构建智能边界
查看>>
react native 在window 7上配置开发环境-Andorid
查看>>