现在位置:首页> 面试 > 面试试题 > 有难度的Ruby专业面试试题

有难度的Ruby专业面试试题

时间:2019-12-01 21:04 面试试题 难度大

  一、Ruby如何定义一个类

  类是对具有同样属性和同样行为的对象的抽象,Ruby中类的声明使用class关键字。定义类的语法如下,

  class ClassName

  def method_name(variables)

  #some code

  end

  end

  类的定义要在class…end之间,在上面的格式中,ClassName是类名,类名必须以大写字母开始,也就是说类名要是个常量。

  看下面的例子:

  class Person

  def initialize(name, gender, age)

  @name = name

  @gender = gender

  @age = age

  end

  end

  若某个类已经被定义过,此时又用相同的类名进行类定义的话,就意味着对原有的类的定义进行追加。

  class Test

  def meth1

  puts “This is meth1″

  end

  end

  class Test

  def meth2

  puts “This is meth2″

  end

  end

  在Test类中,原有meth1方法,我们又追加了meth2方法,这时候,对于Test类的对象,meth1和meth2同样可用。

  二、如何安装ruby on rails

  在安装rails之前,要先安装rubygems。rubygems是ruby的在线包管理工具,可以从rubyforge下载rubygems:

  https://rubyforge.org/projects/rubygems/

  下载好源代码包,解压缩,安装:

  tar xzvf rubygems-0.9.0.tgz

  cd rubygems-0.9.0/

  ruby setup.rb

  然后就可以安装rails了,在确认服务器已经连接互联网的情况下执行:

  gem install rails –y

  即通过gem从rubyforge网站下载rails所有依赖包安装。

  安装好rails以后,可以执行:

  rails –v

  确认一下rails的版本。

  三、如何将一个描述日期或日期/时间的字符串转换为一个Date对象

  问题:如何将一个描述日期或日期/ 时间的字符串转换为一个Date对象,其中,时间前面的字符串格式可能并不知道。

  参考答案:

  将日期字符串传递给Date.parse或DateTime.parse:

  require ‘date’

  Date.parse(’2/9/2007′).to_s

  # => "2007-02-09"

  DateTime.parse(’02-09-2007 12:30:44 AM’).to_s

  # => "2007-09-02T00:30:44Z"

  DateTime.parse(’02-09-2007 12:30:44 PM EST’).to_s

  # => "2007-09-02T12:30:44-0500"

  Date.parse(‘Wednesday, January 10, 2001′).to_s

  # => "2001-01-10"

  四、Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗

  Ruby中的保护方法和私有方法与一般面向对象程序设计语言的概念有所区别,保护方法的意思是方法只能方法只能被定义这个方法的类自己的对象和子类的对象访问,私有方法只能被对象自己访问。

  class Test

  def method1 #默认为公有方法

  …

  end

  protected #保护方法

  def method2

  …

  end

  private #私有方法

  def method3

  end

  public

  def test_protected(arg) #arg是Test类的对象

  arg.method2 #正确,可以访问同类其他对象的保护方法

  end

  def test_private(arg) #arg是Test类的对象

  arg.method3 #错误,不能访问同类其他对象的私有方法

  end

  end

  obj1 = Test.new

  obj2 = Test.new

  obj1.test_protected(obj2)

  obj1.test_private(obj2)

  可以看到,和C++/Java相比,Ruby提供了更好的封装性。