ruby学习笔记

在类方法中使用yield时,会让函数挂起,返回yield后面的值给块并执行块语句,执行完后继续返回函数,继续往下执行,函数执行结束,默认返回最后一行,有return的话,就返回return后的值,无值默认返回nil。

类方法定义:self.method 或者 类名.method;  实例方法:直接method 。类不能直接调用实例方法;

 

# block_given?判断是否存在 block ,可以在不带块去调用函数不报错继续执行。

  1. 局部变量以小写字母或下划线开头
  2. 全局变量以$开头
  3. 实例变量以@开头
  4. 类变量以@@开头
  5. 常量或类名以大写字母开头

符号类型的特点:相同标识符表示的符号在任何地方引用的都是一个相同的实例,符号的唯一性。符号创建: 在:后面加上一个标识符即可创建一个符号。

nil 关键字表示空集,ruby逻辑判断只有nil&&false表示假,其他都是真包含0;

 

=begin  ... =end ...可以放多行文字,不被解释,表示多行注释

 

对象冻结后,freeze 使用或修改对象会报错,但重新创建对象不会报错。

dup/clone/=都是浅复制。当是浅复制,是复制引用,即复制了他的内存地址,当修改原地址,复制地址不变,当不改原地址只是修改值,复制地址的值会跟着变化。

查看内存地址 obj.object_id 可以看到

继承 <  拓展 <<:附加

别名:  alias  新名字  旧名字  新方法指向旧方法,当调用新旧方法时候就都会指向旧方法,但是!!!如果,旧方法被覆盖重新定义,调用旧方法时会直接调用新定义的旧方法,从而执行新定义的旧方法的代码。

对象序列化:  内置模块Marshal模块可方便地进行对象序列化以及还原操作,Marshal.dump方法将对象序列化生成一串字符串。Marshal.load(Marshal.dump(obj))

 

extend/include区别:include ,导入模块方法变成实例方法,extend 导入模块方法变成类方法,并且所有对象都可以extend模块方法而获得其方法。

 

加载和混入模块:

require  保证模块只被加载一次,而load会重新加载代码,load,require都会对被加载的文件的局部变量不会加载。

upcase/downcase 大小写方法

undef function/remove_method 动态删除方法,前者删除比较彻底,会将父类的方法也删除,后者不会删父类方法   remove_const 删除常数   ps| remove_method/const 是私有方法,只能在类和模块中使用

 

异常处理:

begin  

rescue exception1/2/3

ensure 出错必执行

end

 

遍历: enum.find(ifnone=nil){|obj| block} 寻找集合符合条件元素,遍历数组给block,返回第一个匹配的元素,若无,返回ifnone参数

 

enum.all?{|obj|block}判断集合所有的元素是否满足某条件,若条件块没返回false/nil,则返回true,否则是false

enum.any? 同上,不过只要一个元素满足就是true

enum.collect{|obj|block}  每个元素调用块,返回数组

enum.each_with_index{|obj,i| block} 传入2参数,执行block语句

enum.inject(initial = nil){ |memo|, object| block } 遍历集合,累计block结果,将每一步block结果替换成memo, 如指定initial,则memo初始值为initial值,否则以第一个元素值为memo初始值,并且第一元素不迭代.

enum.partition{|i| i %2 == 0} 返回[[2,4],[1,3,5]] 将集合按条件分割,返回两个数组,第一数组包含让block为真的元素,另一个含有集合使block为假的元素;

enum.max 返回集合最大元素  假如是字符串,则根据字符串的字母进行排序

enum.max{|a,b| block} 自定义比较语句的block

enum.min、enum.min{|a,b| block}与max同理,不过找最小

enum.sort、enum.sort{|a,b| block} 让集合进行排序  enum.sort_by {|obj|block} 根据某规则对集合元素进行排序

.. 闭合区间,...前闭后开区间,

a,b,c,d = [1,'a',[1,2],(1..5)] 这是一个快速并行赋值的方法,可以简化代码

| 并集,<< 追加元素 ; * 重复数组,如果*之后是整数,返回重复整数次数的数组,如果*之后是字符串,则重复使用该字符串连接数组。*之后不能为负数,小数默认成整数进行匹配。

 

delete(obj) 删除的是对象,pop/shift(num),删除的是个数,从后/前开始删,delete_at(index) 删除的是指定下标位置; delete_if{|item| block} 删除制定条件(使block返回true)的元素。

compact:返回数组副本,删除其中nil元素,副本 和原数组内存地址不同。等价于深拷贝。

flattern: 如果数组中包含元素有数组,该数组会不断递归合并,返回一个只包含基本元素的数组。

index(obj):返回obj的下标

insert(index,obj) ,join(obj)同python

 

散列: hsh.delete(key)  hsh.delete_if{|key,value|  block}: 删除指定条件散列的元素,执行将会删除使block 返回值为true的元素。

hsh.has_key?(key)   hsh.has_value?(val)  hsh.index(val) :返回散列值等于val的键,hsh.invert:返回逆转散列的键和值的新散列,逆转散列键值。

hsh.keys:返回散列键组成的数组,hsh.values:返回散列值组成的数组,hsh.value_at(keys):返回给定键对应的值组成的数组。

hsh.length:返回散列中元素的个数,hsh.merge(other_hash):合并两个散列,如有重复键,将使用other_hash中对应的值覆盖hash中的值。

hsh.replace(other_hash):使用other_hash中的值替换hsh中相同键的值。

hsh.to_a:将散列转换为数组。以每一个键值对生成一个数组。嵌套在数组里。

查找和迭代:hsh.find_all{|key,value| value <15} 查找所有小于15的元素 

hsh.map{|key,value| "#{key}-#{value}"}  返回元素键和值生成的数组

hsh.sort  按值排序  hsh.sort_by{|key,value| key} 按键排序

hsh.each do |key,value|  散列迭代键值,也可以仅对键或值进行迭代,|key| or |value|

 

str.gsub(pattern, replacement)  字符串替换功能。将左边的字符替换为右边的字符。

 

 

 

两个对象之间进行比较时,ruby,会直接判断不能比较。虽然值一样,但是内存地址不一样,会返回false。

提示:1.常量也可以修改,不过会有警告;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值