📅  最后修改于: 2021-01-08 13:26:23             🧑  作者: Mango
下面列出了一些常见的Ruby或Ruby On Rails面试问题和答案。
Ruby是一种动态,反思,通用的开源编程语言,专注于简单性和生产力。 Ruby具有Perl,闲聊,Eiffel,Ada和Lisp的混合功能。 Ruby旨在创建一种新语言,该语言与命令式语言的功能保持平衡。
有关更多信息:单击此处
Ruby是由1990年中期在日本的Yukihiro“ martz” Matsumoto设计和开发的。
有关更多信息:单击此处
Ruby被称为灵活的语言,因为它有助于其作者更改编程元素。可以删除或重新定义语言的某些特定部分。 Ruby不限制用户。例如,要添加两个数字,Ruby允许使用+号或单词“ plus”。可以使用Ruby的内置类Numeric完成此更改。
Ruby具有许多功能。下面列出了其中一些。
有关更多信息:单击此处
相似之处:
差异:
有关更多信息:单击此处
红宝石-v
有关更多信息:单击此处
Ruby类库包含各种领域,例如线程编程,数据类型和各种领域。以下是具有相关类库的域的列表:
运算符是用于执行不同操作的符号。
有关更多信息:单击此处
RubyGems提供了用于分发红宝石程序和库的标准格式。它充当Ruby编程语言的程序包管理器。
RubyGems现在是Ruby 1.9版标准库的一部分。
Ruby变量保存可在程序以后使用的数据。每个变量都充当内存并使用不同的名称。
Ruby中有四种类型的变量:
有关更多信息:单击此处
nil | false |
---|---|
nil cannot be a value. | false can be a value. |
nil is returned where there is no predicate. | in case of a predicate, true or false is returned by a method. |
nil is not a boolean data type. | false is a boolean data type. |
nil is an object of nilclass. | false is an object of falseclass. |
Ruby数据类型表示数据类型,例如文本,字符串,数字等。
Ruby中有不同的数据类型:
有关更多信息:单击此处
在Ruby中,将load和require都用于将可用代码加载到当前代码中。如果每次更改时或每次有人访问URL时都需要加载代码,则建议使用“加载”。
如果是自动加载,建议使用“ require”。
Ruby if-else语句用于测试条件。 Ruby中有多种类型的语句。
有关更多信息:单击此处
在Ruby中,我们使用“ case”代替“ switch”,并使用“ when”代替“ case”。 case语句将一个条件与多个条件匹配,就像其他语言中的switch语句一样。
有关更多信息:单击此处
Ruby for循环迭代特定范围的数字。因此,如果程序具有固定的迭代次数,则使用for循环。
Ruby for循环将对表达式中的每个元素执行一次。
有关更多信息:单击此处
Ruby while循环用于多次迭代程序。如果迭代次数不固定
对于程序,使用while循环。
有关更多信息:单击此处
Ruby的while循环会多次迭代程序的一部分。在这种情况下,循环将至少执行一次,因为在最后写入条件时执行do。
有关更多信息:单击此处
Ruby直到循环运行,直到给定条件的值为真。当条件为真时,它将退出循环。它与while循环相反。
有关更多信息:单击此处
Ruby break语句用于终止循环。它主要用于在while循环中打印值直到条件为真的while循环。
有关更多信息:单击此处
Ruby next语句用于跳过循环的下一个迭代。一旦执行下一条语句,将不再执行任何迭代。
有关更多信息:单击此处
Ruby重做语句用于重复循环的当前迭代。在不评估循环条件的情况下执行重做语句。
有关更多信息:单击此处
Ruby retry语句用于从头开始重复整个循环迭代。
有关更多信息:单击此处
Ruby注释是程序中的不可执行行。他们不参与程序的执行。
单行注释语法:
#This is single line comment.
多行注释语法:
=begin
This
is
multi line
comment
=end
有关更多信息:单击此处
对象是所有Ruby对象的默认根。 Ruby对象继承自BasicObject,该对象允许创建备用对象层次结构。
有关更多信息:单击此处
Ruby中的对象是通过调用类的新方法创建的。这是一种独特的方法,并且在Ruby库中预定义。
句法:
objectName=className.new
有关更多信息:单击此处
每个Ruby类都是Ruby类的实例。 Ruby中的类是一流的对象。它始终以关键字类开头,后跟类名。
句法:
class ClassName
codes...
end
有关更多信息:单击此处
Ruby方法阻止我们一次又一次地在程序中编写相同的代码。 Ruby方法类似于其他语言中的函数。
有关更多信息:单击此处
要使用Ruby方法,我们需要先定义它。它用def和end关键字定义。
方法名称应始终以小写字母开头。
句法:
def methodName
code...
end
有关更多信息:单击此处
Ruby代码块在其他编程语言中称为闭包。它由一组代码组成,这些代码始终用大括号括起来或写在do … end之间。
有关更多信息:单击此处
块以两种方式写入:
两者相同并且具有相同的功能。
有关更多信息:单击此处
句法:
block_name{
statement1
statement2
..........
}
有关更多信息:单击此处
yield语句用于调用具有值的方法中的块。
有关更多信息:单击此处
&block是一种将对块的引用(而不是局部变量)传递给方法的方法。
在这里,&后面的正楷词只是参考的名称,可以使用任何其他名称代替。
有关更多信息:单击此处
Ruby模块是方法和常量的集合。模块方法可以是实例方法或模块方法。它们与类相似,因为它们包含方法,类定义,常量和其他模块的集合。它们的定义类似于类。无法使用模块创建对象或子类。没有继承的模块层次结构。
模块基本上有两个作用:
句法:
module ModuleName
statement1
statement2
...........
end
模块名称应以大写字母开头。
有关更多信息:单击此处
Ruby不支持多重继承。模块消除了在Ruby中使用mixin进行多重继承的需要。
一个模块没有实例,因为它不是一个类。但是,模块可以包含在类中。
当您在类中包含模块时,该类将有权访问该模块的方法。
有关更多信息:单击此处
Ruby字符串对象保存并操纵一个字节的任意序列,通常表示字符。它们是使用String :: new或字面量的。
有关更多信息:单击此处
您可以使用方括号[]来访问Ruby字符串元素的不同部分。在方括号内写下索引或字符串。
有关更多信息:单击此处
用Ruby语言编写多行字符串非常简单。我们将展示三种print多行字符串。
有关更多信息:单击此处
全局变量在Ruby中声明,您可以在应用程序中的任何位置访问它,因为它在应用程序中具有完整的作用域。全局变量在带$前缀的Ruby中使用。
Ruby串联字符串意味着从多个字符串创建一个字符串。你可以加入多个字符串通过连接他们形成一个字符串。
有四种方法可以将Ruby字符串连接为单个字符串:
有关更多信息:单击此处
在大多数编程语言中,字符串是不可变的。这意味着无法修改现有字符串,只能从中创建新字符串。
在Ruby中,默认情况下字符串不是不可变的。为了使它们不可变,可以使用冻结方法。
有关更多信息:单击此处
Ruby字符串可以与三个运算符进行比较:
有关更多信息:单击此处
Ruby类库包含各种领域,例如线程编程,数据类型和各种领域。以下是具有相关类库的域的列表:
Ruby数组是对象的有序集合。它们可以容纳整数,数字,哈希,字符串,符号或任何其他数组之类的对象。
它的索引从0开始。负索引从数组的结尾开始从-1开始。例如,-1表示数组的最后一个元素,0表示数组的第一个元素。
Ruby数组可以通过多种方式创建。
有关更多信息:单击此处
可以使用#[]方法访问Ruby数组元素。您可以传递一个或多个参数,甚至可以传递一系列参数。
句法:
#[] method
用于访问Ruby元素的方法:
有关更多信息:单击此处
Ruby数组元素可以以不同的方式添加。
有关更多信息:单击此处
Ruby数组元素可以通过不同的方式删除。
有关更多信息:单击此处
Ruby哈希是唯一键及其值的集合。它们类似于数组,但是数组使用整数作为索引,而哈希使用任何对象类型。它们也称为关联数组,字典或地图。
如果使用不存在的键访问哈希,则该方法将返回nil。
有关更多信息:单击此处
可以使用:: new创建新的Time实例。这将使用您当前系统的时间。还可以传递部分时间,例如年,月,日,小时,分钟等。
创建新的时间实例时,您至少需要经过一年。如果仅经过了一年,则时间将默认为该年的1月1日,当前系统时区为00:00:00。
有关更多信息:单击此处
Ruby范围代表一组带有开头和结尾的值。可以使用s..e和s … e字面量或:: new构造它们。
其中包含..的范围从头到尾都包括在内。其中包含…的范围专门运行最终值。
Ruby有多种定义范围的方法。
有关更多信息:单击此处
迭代器是面向对象语言中使用的概念。迭代意味着像循环一样多次执行一件事。
循环方法是最简单的迭代器。它们一个接一个地返回集合中的所有元素。数组和哈希值属于集合类别。
有关更多信息:单击此处
Ruby中有以下迭代器:
有关更多信息:单击此处
IO控制台提供了与控制台进行交互的不同方法。 IO类提供以下基本方法:
有关更多信息:单击此处
可以使用不同的方法来读取,写入或同时使用两种方法来创建Ruby文件。
有两种方法可以在Ruby中打开文件。
两种方法之间的区别是File.open方法可以与块关联,而File.new方法不能。
句法:
f = File.new("fileName.rb")
要么,
File.open("fileName.rb", "mode") do |f|
有关更多信息:单击此处
有三种不同的读取文件的方法。
要返回单行,请使用以下语法。
句法:
f.gets
code...
要在当前位置之后返回整个文件,请使用以下语法。
句法:
f.rea
code...
要将文件作为行数组返回,请使用以下语法。
句法:
f.readlines
[code...]
Ruby类库包含各种领域,例如线程编程,数据类型和各种领域。它具有不断发展的其他库。以下是具有相关类库的域。
sysread方法还用于读取文件的内容。借助这种方法,您可以以任何方式打开文件。
有关更多信息:单击此处
Ruby文件使用重命名方法重命名,并使用删除方法删除。
要重命名文件,请使用以下语法。
句法:
File.rename("olderName.txt", "newName.txt")
要删除文件,请使用以下语法。
句法:
File.delete("filename.txt")
有关更多信息:单击此处
要检查目录是否存在?使用方法。
句法:
puts Dir.exists? "dirName"
有关更多信息:单击此处
Ruby异常是一个对象,Exception类的实例或该类的后代。当出现问题时,Ruby程序会抛出异常行为。默认情况下,Ruby程序在引发异常时终止。
有关更多信息:单击此处
内置的异常子类如下:
有关更多信息:单击此处
为了处理异常,引发异常的代码包含在begin-end块内。使用救援子句,我们可以声明我们要处理的异常类型。
有关更多信息:单击此处
通常,在救援子句中,捕获异常,并在begin块之后恢复代码。使用retry语句,可以在捕获异常后从头开始恢复救援块代码。
句法:
begin
code....
rescue
# capture exceptions
retry # program will run from the begin block
end
有关更多信息:单击此处
引发语句用于引发异常。
句法:
raise
要么,
raise "Error Message"
要么,
raise ExceptionType, "Error Message"
要么,
raise ExceptionType, "Error Message" condition
有关更多信息:单击此处
有一个保证子句,保证在代码末尾进行某些处理。无论是否引发异常,sure块始终运行。它被放置在最后一个救援子句之后,并且将在块终止时始终执行。
在任何情况下,无论发生异常,抢救异常还是未捕获的异常终止代码,sure块都将运行。
句法:
begin
code..
#..raise exception
rescue
#.. exception is rescued
ensure
#.. This code will always execute.
end
有关更多信息:单击此处