在社区前辈的指导下租了 DigitalOcean 的服务器。
谢谢大兄弟~
弱弱地说一下,其实我深挖的方向是 web 前端。。。挖了这些年有点挖厌倦了,毕竟前端能够创造出的价值非常有限。
都是好书。谢谢小姐姐~
嗯。受教了,等我积累一段时间可以考虑试一试,还能多拿个证,挺好。
谢谢前辈!
哈哈!这个思路挺新颖,一举两得。
记得大学时,我们学校报考的二级都是 C 语言,当时为了考的容易一些,特意跑到隔壁一个师范学校报了一个 Access 数据库,还嘚比嗖嗖地给一起考试的小姑娘传答案(后来坑蒙拐骗取了其中一个小姑凉。。。)
考二级的时候,内心的 OS 是,以后我可不要当程序员!结果兜兜转转还是做了程序员。。。
厉害!膜拜中
谢谢推荐!
非常全面!谢谢前辈!
前辈您这指导相当生动接地气儿啦!(红黑树那段我笑出了声)
就像前辈说的,时间和精力真的是感觉越来越不够用了,可能看一个框架一个月能基本上手干活,但是看一个月算法可能门儿都没入,大多时候迫于工作出结果就选择了前者。所以,对于坚持这个事,我真不敢夸下海口。现在被逼得每次上大号都会多上十分钟,在里面看算法书。。。
但不管怎么说,我还是要挑战一下自己,不以面试为目标,也不以炫技为目标,就为了不给自己的程序员生涯留下遗憾。(决心表完了,嘿嘿~)
感谢前辈愿意花时间码字指导!(敬礼~)
前辈介绍的很具体,最后的总结也很有指导性。
算法引论这本书之前自己了解过一些,觉得很有启发性,但是一问算法,大部分人都推荐算法第四版还有算法导论这两本,前辈的分析让我肯定了对算法引论这本书的选择。谢谢!
谢谢!
很全面,多谢!
非常感谢!
不太明白为啥 node 圈里 express 和 koa 这么受推崇,我记得当年学习后端的时候比来比去,觉得 hapi 最完善,所以毅然从 hapi 入手,现在想想,当时幸好没从 express 入手,要不然肯定学的七零八碎的。
为了写博客特意自己搭了一个,结果搭完了一篇还没写。。。用啥写真的不重要
我来回答自己的问题了,忘记加 false 参数了,所以在调用 self.singleton_class.private_instance_methods 的时候把 Object 上的方法也查找了。。。
这样就好了
p self.singleton_class.private_instance_methods(false).grep(/^global_method/) # => []
谢谢前辈的指点!
你是对的!顶级作用域下直接定义方法是在 Object 上定义私有实例方法 (相当于打开类定义实例方法),如果明确在 self 上定义方法,才是在 self 的单件类上定义方法(相当于自定义对象上定义方法的语法 def obj.some_method; end),是我的理解不准确。
但是我在下面的代码里又出现了一个小疑问,还麻烦指点一下,谢谢了!
def global_method
end
p self.singleton_methods.grep(/^global_method/) # => []
p Object.private_instance_methods.grep(/^global_method/) # => [:global_method]
def self.global_method2
end
p self.singleton_methods.grep(/^global_method/) # => [:global_method2]
# 这里就有个疑问了,在self单件类上咋还有global_method这个方法呢?
p self.singleton_class.private_instance_methods.grep(/^global_method/) # => [:global_method]
p self.singleton_class # => #<Class:#<Object:0x00000000003ba290>>
是不是用 credentials 好一点,省去配置各种环境变量的麻烦,如果不得不用环境变量的话,请人工忽略此回复。。。
不不不,程序员都挺聪明的,我只是多了点细心,嘿嘿~
官方文档我没怎么翻,我是先看的书,一本叫做《Ruby 元编程》的书,书里给到的继承图谱是一些比较核心部分的,我在网上也没搜索到全面的(可能有,我没发现),所以上面那个图是我在 irb 里根据各个对象打印出来的祖先链画出来的。。。
大部分人还是停留在应用的层面,可能也没必要太深入的研究,但是不能否认基础好的人对技术的领悟力更强。所以我觉得如果自己需要进阶,计算机基础还是需要恶补的。
因为我不是学计算机出身的,自己的计算机基础也比较薄弱,所以只是在用一些自己觉得比较好理解的笨方法来理解和记忆,兄弟你的阐述我大致看明白了,怎么说呢,就是有一个自己最熟悉的概念模型能帮助自己最好的理解就可以了。我的计算机基础还需加强。
兄弟,我对你的问题的理解有两种。
1.顶级作用域下的单件方法
Ruby 顶级作用域就是在 Object 内部,self 默认指向一个 Object 的特殊实例 -> main 对象,在调用方法的时候其实调用的是 main 对象的单件方法, updated_begin: 在调用方法的时候实际上生效的是 Object 的实例方法,但是如果在 self 上显示添加了单件方法,比如像这样 def self.method_name; end
, 那么在调用这个单件方法时,就是在其单件类上查找到的 updated_end,查找方法的完整祖先链是:
self.singleton_class.ancestors # => [#<Class:#<Object:0x00000000004ea2c8>>, Object, Kernel, BasicObject]
(其实整个的原理跟在 class 关键字内部定义方法和打开单件类定义方法的原理是一样的,是我一开始没理解好,这里做了修改。)
2.所有对象的单件方法
Ruby 中一切皆对象,按照继承链图谱,要保证所有对象都有某个可被调用的单件方法的话,那么这个单件方法可定义的地方不只一处,可以在 BasicObject 中、Kernel 中、Object 中定义为实例方法。
另外, 如果有 java 背景更强调类的概念,@spike76 兄弟给你的回答应该是更容易理解的。
我在学习 Ruby 的过程中感觉类和对象的界限不是绝对的,类也是对象,对象也有可能是个类,如何区分应该是看它当前扮演的角色,或者说我更倾向于用单件类的概念来理解对象的方法,在 Ruby 中对象的方法是按照其单件类继承链来查找的。
(ps:我是初学者,如果有前辈发现有描述错误的,请指正,免得我误导了别人,谢谢!)
很有道理咧!多谢兄台!
非常感谢!看到白板类三个字不由自主地激灵了一下子,有点开窍了。
前辈,我为了证明,写了一小段代码,从输出结果来看,我的推测应该是对的呀。
module Kernel
def print(arg)
p 'instance method print of Kernel'
end
class << self
def print(arg)
p 'singleton method print of Kernel'
end
end
end
class Foo
print "" # => "instance method print of Kernel"
end
虽然 Kernel 的 instance method print 和 singleton method print 都是同一个 print 方法对象,但是我还是没能通过你的例子理解 Kernel 中 singleton methods 中和 instance methods 中重名方法的使用场景。我是不是有点笨。。。
在定义 Foo 这个 class 调用 print 的时候,self 指向 Foo,Foo 相当于一个实例,那这个 print 应该是查找它的类中的实例方法 print,祖先链走的应该是#MyClass(#Foo)这条,会在 Kernel 中找到 print 方法,但 Kernel 中找到的这个 print 是 Kernel 的 instance method 不是 singleton method 中的 print 呀。我的理解对不对呀。
大兄弟别客气,每个人都有自己擅长和不擅长的领域,我也是个 Rails 小白人,Ruby China 的绝大多数前辈都很友好,祝你学的开心,找到乐趣。