Block、Proc 与 Lambda的区别: https://www.jianshu.com/p/8a3b3e22e013
alias 与 alias_method 的区别: http://lazybios.com/2015/11/alias-vs-aliasmethod/
yield self 的用法, 写个
例子: https://www.jianshu.com/p/d13b2b26b4d7
Scope实现原理: https://narutohinata.github.io/2017/03/05/ActiveRecord%E9%87%8C%E7%9A%84Scope%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86/
require、load、autoload、require_dependency的区别及其使用场景:
require: 引用文件,但是只能引用一次
load: 和require类似,但是支持多次引用,如果引用文件的内容变动频繁就用load
autoload: 只有引用文件的类或者module被使用时才会加载这个文件
require_dependency: 开发环境下如果文件有改动,会自动加载该文件
Object、 Module、 Class、Kernel 解释及其关系:
object是所有类的基类,module是模块除了不能new一个实例外基本上和
class一样,
他们的关系是 class > module > object
Kernel 是一个module,里面包含了很多方法,而Object包含了这个模块,所以所有的Object的子类都可以使用Kernel的方法,例如nil? puts等。
ruby
单例模式如何实现:
require "singleton"
class User
include Singleton
end
User.
instance
singleton method(单件方法)、singleton class(单件类) 解释一下:
1) singleton method是指只属于某个对象的方法,其他对象不可以使用,例如先创建一个对象,然后为该对象追加一个方法。
class User
end
user = User.new
class << user
def username
"zhangsan"
end
end
或者
def user.username
def username
"zhangsan"
end
end
puts user.singleton_methods
这里的username方法就是只属于user这个实例的方法
注意: 类方法定义方式如下两种,看起来是不是和singleton method一样,其实类方法的本质就是类的singleton method
class << self
def username
end
end
def User.username
end
2)singleton class(单件类): singleton method不属于class,而是属于singleton class中也就是 如下:
class << obj
def ..
end
end
块解释以及和函数的区别:
块是闭包,通过大括号或者do..end实现,本身也起到类似函数的作用,相对于函数有如下优势:
1)容错设计,如
hash={}; hash.fetch('name'){"wo"}
2) DSL语言设计
如何调用私有方法:
send可以调用私有方法