欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ruby面试

程序员文章站 2022-05-21 11:03:19
...
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: 引用文件,但是只能引用一次。举个例子,irb中引用b文件,b文件常量Age为35,第一次执行Age为35,然后我们修改b文件常量Age为36,再次引用执行还是35,而load就会是36。
load: 和require类似,但是支持多次引用,如果引用文件的内容变动频繁就用load,这里举个例子,有两个文件,分别是a和b,a引用b,b引用a,如果是使用require执行的时候就不会报错,如果是load执行的时候就会报错。此外a文件有常量Age,引用的b文件也有的话,会报警告信息,这个时候load(b.rb, true)就可以避免常量被污染。
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可以调用私有方法
相关标签: ruby 面试