您的位置:首页 > 编程语言 > Ruby

《ruby元编程》读后感3

2018-03-07 09:20 218 查看
昨天读小说太投入了,一不留神就到11:30了,小说真吸引人啦。什么时候,能把看技术书,象读小说一样就好了。
技术书籍,要动脑,而小说纯粹就是好看。
本不想动笔,一看访问量,还有蛮多的,看来,就再写写,感觉很鼓励人的。我呢,就按自己的写。
第三章
代码块。说实在的,我第一次看到代码块,很惊奇的,因为我原来的完全不相同。lisp我学过,高阶函数,我知道,但用代码块的形式实现高阶函数,还是很有创新的。
闭包,很玄,我还向同事说起闭包。
def my_method
   x="hello"
   yield("cruel")
end
x="hello"
my_method { |y| "#{x} ,#{y} world }
此时,结果是
hello ,cruel world
虽然在方法中定义了x,但块看到的是在块定义时绑定的x
我一直有些不明白,现在还是迷糊。大致就是块可以看到外部的变量,没有彻底理解,记住了这个事实,再利用这个事实,跨过作用域。
比如
class
module
def
都会打开新的作用域,但如果把class换成class new,把类定义变成方法,在方法外部写一个块,在块中可以用外面的变量,就实现了让两个作用域共用变量的目的。
v1=1
MyClass=Class.new do
    puts "#{v1}"
end
看到没,在块中就用到了外部的变量。
如果说闭包还有些迷糊,但instance_eval()就真是看不懂了,因为其中用到了self
class MyClass
   def initialize
       @v=1
   end
end
obj=MyClass.new
obj.instance_eval  do
     @v=2
end
运行时,instance_eval块的接受者会变成self,不明白,真是看不懂?
接受者不是obj呢,和self有什么关系,self不是和java的this指针差不多吗?理解不了。
后面再讲proc,lamaba我就没看了。我一直想把邱奇的理论看懂,不过可惜,比图灵的还难懂。我还是慢慢看图灵的论文吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: