Ruby中单例类的5种声明方式

一个匿名类(Anonymous Class)也被称作单例类(Singleton Class),特征类(Eigenclass),鬼魂类(Ghost Class),元类(Metaclass)或者uniclass。 Ruby中每个对象都有其自己的匿名类,一个类能拥有方法,但是只能对该对象本身其作用:当我们对一个具体的对象添加方法时,Ruby会插入一个新的匿名类于父类之间,来容纳这个新建立的方法。值得注意的是,匿名类通常是不可见(Hidden)的。它没有名字因此不能像其他类一样,通过一个常量来访...


Ruby的方法查找再往前一步

《Ruby元编程(第二版)》 5.4节 单件类 在 Page125 这页,讲了一种情况: class C def a_method 'C#a_method()' end end class C class << self def a_class_method '#C.a_class_method() #singleton' end end end class D < C;end obj = D.new ...


关于Ruby和JavaScript对比的思考

最近研究得到了一些比较主观的自以为有趣的结论: 关于JavaScript & Ruby JavaScript 和 Ruby可以说是两兄弟,他们都携带了Lisp的基因。 Ruby里面 Class(类)、Method(方法)、Proc/Lambda & Closure(匿名函数/lambda表达式,往往伴随着闭包工作) 他们是分开的。这是Ruby的“最小惊讶“设计原则,十分合理,秩序竟然设计精良。 JavaScript里面 通过 一个 function(函数) 把 ...


Ruby剖析笔记

一、查找过程总结 查找方法 查找方法是顺着继承关系查找 查找变量 查找变量是按照词法作用域查找 所以代码的执行是一个这样的过程,一边扫描一边执行,读一块代码,生成对应的词法结构,使用指针记录上下文。 遇到变量的时候,主要是闭包的过程,开始顺着词法作用域,查找到变量。 如果变量是对象,调用方法,那么沿着对象的 自身、单例、父类、超父类继承链条向上查找。 二、块 1. 块是闭包 虽然块(block)被叫做block,这是按照形式去描述的名字。 他的类归属于...


Ruby的类方法

Ruby中定义类方法有很多种形式。参考 《Ruby基础教程(第五版)》 8.2.6 类方法(page93)。 class << Helloworld def hello(name) puts "#{name} said Hello." end end class HelloWorld class << self def hello(name) puts "#{name} said Hello." end e...


Docker问题汇总

一、Docker-in-Docker 网络问题,无法连接tcp://docker:2375/ 问题: Docker报错如下 Docker in Docker is failing with error - Cannot connect to the Docker daemon at tcp://docker:2375/. Is the docker daemon running? 解决 build:docker: image: docker:20-dind variab...


实践可以先于理论:思考个人实践的思想

计算机的书籍浩如烟海,我们应该何时开始创造? 我自己包括我见到的很多人,可能考虑的问题都是尽量学习多一点,拥有了储备知识再去创造。 虽然时间变久,我觉得前期这句话是正确的,中后期这句话是不正确的。 理论和实践之间的相对关系应该是怎么样的? 我现在的个人想法是: 1)我们学习什么? 我们学习的不应该是一些符号,一些API怎么用?这些东西肤浅且易变,他们虽然是程序的载体,确是程序中最不重要的东西。 学习编程应该像张无忌学武功,我们要尽量忘记所有有形的东西,然后尝试理解无形的东西—...


解剖复杂语言和框架的方法

一、我的思想 1.1 三要素 我总是忘记,我记录一下吧。 在我心中一直有一个困扰就是如何剖析比较复杂框架、应用的过程。举个例子,比如Ruby中把 Monkey Patching 当做特性, 比如高度的动态性,可以任意对象增加方法,可以使用复杂的继承比如Rails,也可以在全局注入 DSL 方法比如 Sinatra …… 魔法有很多,我们如何观察魔法呢?我们有什么方式可以梳理这种动态性。和复杂性。 我仔细想了一些这种问题。我给出一些我的思考。 不论是看源码,看执行,自己写代码,d...


Hybrid H5线上debug或者提供一个个人灰度的方法

一、一个线上debug H5的方法 确保你的环境使用docker构建 遇到线上失败的问题时,不论是下载构建产物本地部署。那都不能保证和线上一样的环境。 所以我的方法是 下载线上镜像,本地部署 安卓可以打包出一个预览console的生产包 使用scheme的方式,从浏览器跳转进入app预览页面 处理好跨域问题,域名问题。比如本地在当前网络中设置一个后端服务器接受的跨域的域名。 用 app通过scheme方式跳...


Mark24

Everything can Mix.