启动rails console,第一步是获取一个持久化对象。我们之前创建过了,现在从数据库中读取他,find命令后面会学到。将数据库中id为3的对象赋值给subject3,打印一下name属性,更新name属性,保存。
ruby中使用 begin rescue end 语句描述异常处理
在ruby中,异常及其相关信息都是被作为对象来处理的,在 rescue 后面制定变量名,可以获得异常对象。
即使不指定变量名,ruby也会把异常对象赋值给变量 $! 。
不过把变量名明确写出来会使程序更加易懂。
异常对象的方法
如果发生异常的方法中没有rescue处理,程序会逆向查找调用者中是否定义了异常处理。
不管是否发生异常都希望执行的处理,在ruby中可以用ensure关键字来定义。
在 rescue 中使用 retry 后, begin 以下的处理会再做一遍。
retry 会隔一段时间后再执行一次,如果该处一直是异常,那么程序就会陷入死循环。
rescue 修饰符
异常处理方法的补充
如果异常处理的范围是整个方法体,也就是说整个方法内的程序都用 begin end 包含的话,我们就可以省略begin以及end,直接书写rescue和ensure部分的程序。
当存在多个种类的异常,且需要按异常的种类分别进行处理时,我们可以用多个rescue来分开处理。
使用raise方法,可以使程序主动抛出异常。在基于自己判定的条件抛出异常,或者把刚捕获到的异常再次抛出并通知异常的调用者等情况下,我们会使用raise方法。
raise方法有以下4中调用方式:
本来想写一篇关于数组遍历处理函数的总结的,写着写着发现还是得把这两个函数单独抽出了讲上一讲,我是直接跳进inject和reduce函数里面看的,发现这两个函数注释简直就是复制粘贴,不说这么多,先上图
这里面对两个函数的用法已经讲得很清楚了,我就不再解释了,但是我们可以看到下图,两个函数的用法说明是一摸一样的,但用法示例却是不一样的,难道区别就在这里吗?
于是我就抱着一种求知探索的精神把这两个函数都试了一遍,最终发现它们真的是一模一样的,
先不说这么多,上图自己看(虽然我还是不死心,但是时间紧迫,先试到这里)
感觉讲到这里就没什么好讲了,不行,这样子走掉很没面子的,就再来扯下皮,嗯~,就说一下对inject和reduce函数的个人理解吧,基于上面证明两者是一样的,我就用inject来讲解下(不要问我为什么用inject,因为我喜欢,个人比较懒,就直接用官方示例了)
刚刚写到下面发现写不下去了,所以先回来讲一下inject的作用机理
enum.reduce(initial) { |memo, obj| block }
enum:数组
initial:为初始值赋值
memo:初始值
obj:遍历数组里的具体对象
block:方法体
1.把initial的值赋给memo
2.memo和obj经过block的处理得出的值再次赋给memo
3.这时候memo的值已经更新,继续与obj经过block的处理得出的值再次赋给memo
4.一直重复3步骤直到enum遍历到最后一个对象
基本使用语法:
好,搞定,收工,如果有什么问题可以在下面留言