Ruby 版本的在那里?
还有个小小建议,我非常期待可以将 Ruby Conf
和 Rails Conf
分开,由不同的人搞,大家可以都去参加,或者参加其中之一,虽然 Rails 在国内几乎就是 Ruby 的代名词。
楼主的探索精神值得鼓励!!
不过在常量方面,似乎还有一些东西可以挖掘,给一个思考方向,直接在 Object 中定义一个常量 A, 与在 Kernel 中定义一个常量 A, 然后混入 Object, 在代码中,你都可以直接通过 A
的方式 (不加域限定符::) 来引用,为什么呢?
我认为下面这句话不准确:
换句话说,就像类是对象一样,类名无非就是一个常量而已。
我是这样理解的。(仅供参考)
类不是对象... 类是一个结构,类名才是对象,并且这个对象是一个常量。你可以通过这个对象 (或常量) 来引用 类
.
这哥们儿太极端了,刚开始用 linux, 就传教类似于 nano 和 let 之类的极端玩意儿,nano 虽然可定制性蛮强 (可以改 N 多快捷键), 不过是在算不上什么好编辑器,只不过在服务器上凑合用用。至于 let, 还不如直接打开 bc, 直接计算更简单一些。
我想说下 Arch 和 Slack, 网上也常常将这两个发布版进行比较,Arch 我没用过,不过记得在那里看过介绍,风格主要来自于 Slackware. 不过 Slackware 使用 BSD 风格的脚本,和主流的 Linux 很不一样,另外,他们的包采用的文件格式完全一样,一部分 Arch 的包,可以直接在 Slack 下用。说起入门的难度,Slack 应该比 Arch 更容易一些,至少所有需要的包已经装好了。
且不论 etags 是否好用,看到别人把 Emacs
打成 emcas
, 我声明... 我也蛋疼得很...
哈哈。其实,这道题的意义就在于:对六个要点一一分解,并吃透,并理解这些要点在这里例子中实际起到的作用。这绝不是一道给出答案就完了的题。能挖掘很多东西出来 (以上六点,又可以引申出不少东西来), 这正好可以作为你对面试者挖掘的起点,否则,你直接提出问题,而没有一个实际例子,这样很难描述以上 知识点
吧?
p.s.
好吧,其实从头到脚,我只是提了一句,看到有人贴 Rails面试题, 然后我想到之前遇到的一个问题
, 而且我标题也说了么... 是自测题~ 是楼上的各位 XD 硬要把这道题作为面试题。
Ruby 的确不知道。但是它会尝试调用 to_proc. 这是 Ruby 语言内建的 隐式转换机制
.
看楼主提供的山寨版的 load, 给我一个错觉,就是楼主认为 eval 和 load 是等价的。所以用 eval 来实现 load. (虽然真实的 load 貌似是 C 实现的), 我想问一个问题,在你写山寨版 load 时,你有考虑过 load 和 eval 的区别吗?
看代码:
module Kernel
def load1(fn)
eval File.read(fn)
end
end
load1 './person.rb'
p Person # => Kernel::Person
而如果用常规的 load.
module Kernel
def load1(fn)
load fn
end
end
load1 './person.rb'
p Person # => Person.
因为 Person.rb 一个臆造的文件,而你仅仅使用一个 puts 输出来验证 load 是否正确,肯定不妥。(不管在那个上下文空间被执行,都会 puts), 而如果需要确保第一个 load1 工作的像 load 那样,也只有定义在 Object 中,作为一个私有方法,才有可能正确。
好吧,如果我说这些有些多余 (楼主根本没这么想), 就当我上面废话好了。
补充:新手该看的第一本书是 : Head First Rails
, 图画版的,简单易懂,不过是 E 文版的。
好吧。英文阅读
, 这又是一个使用 Rails 之前,需要打下扎实基础的技能...
在没有经历过足够的痛的前提下,要理解很多改进就成了一件不容易的事情。
这就是标准答案,其他只是帮衬。痛啊痛啊,等你习惯了,觉不到痛的时候,就好了。
楼主还有一句话:
那时我主要是一个后端开发程序员...
再跟自己的已知的知识体系做结合...
这都是亮点... 我觉得应该达成共识,Rails 根本就不是初学者应该碰的玩意儿~
而且不要再谈什么实战了,让初学者,还是打好基础一步一步来吧。
试想,当初楼主之前不懂 SQL, 不懂后端开发,没有熟悉至少一门面向对象的 (动态语言), 也不懂基本的 Linux 知识,好吧,也许还没有一个适用于自己的编辑器,会是现在这样么?
还有:对于新手,Agile Web Development With Rails
绝不是适合你看的第一本书,这来自于本人痛苦的体会,当然,个人体会,仅供参考。
还没有看楼主的讲解,不过看楼上诸位的争论,倒是很精彩。
不过看出来一个问题 (在我自己身上,同样反复出现的问题), 那就是简单问题复杂化,概念的发散,想当然的把很多东西关联起来。我想澄清以下几个概念,避免概念缠绕,理不清。如有问题,请大家指正。
Block 是 Ruby 原生的语法结构,拿英文说,就是 Literal (字面量), 他和数组的 [] 是一样的。它不是对象。
Proc 是一个类,这个类有两种类型的对象 (定义方式不一样), 一个是 Proc 对象。(使用 Proc.new {}或 proc {} 定义), 一个是 Lambda 对象。
可以将 Proc 对象 解释为 Block 的 对象化
形式。而 Lambda 就是 Lambda, 它和方法无关,不要把 Lambda 和 方法扯到一起。
Block 以及 Proc 对象是 yield 语义,Lambda 是 Invoke 语义。( method 也是 invoke 语义)
我貌似没看过他的文章,不过看照片,貌似真有些 Geek 的风格。(聪明绝顶,头发乱乱的,胡子拉碴)
其实可以理解,这样的人总是不是那么擅长推销自己,短期内也不会赚到什么钱的。在国外语言不通,貌似更难了。
好长好长呀~~! 有机会一定细细品读。
明天去呀!!
注意备份... 应该迟早要还的... 我也懒得折腾了,我现在已经包含了我所用的所有东西了,才用了 2.5 G 的三分之一。
我觉得,王垠真的是很牛和牛!牛的一塌糊涂...
不过,有一点,不知道出于什么原因,我似乎没看到过他提起过有关 Ruby 的只言片语...
难道他没有用过 Ruby ? 如果是事实,这应该是他最遗憾的事情了。(至少我替他遗憾...)
要不就是淘宝帮刷的那些家伙们太懒了,邮件名称非随机,太 TMD 有规律了。