Ruby - 内置函数
由于Kernel 模块包含在Object 类中,它的方法在Ruby 程序中随处可用。 它们可以在没有接收器的情况下调用(函数形式)。 因此,它们通常被称为函数。
序号 | 方法 & 描述 |
---|---|
1 | abort 终止程序。 如果引发异常(即 $! 不是 nil),则会显示其错误消息。 |
2 | Array( obj) 使用 to_ary 或 to_a 将其转换为数组后返回 obj。 |
3 | at_exit {...} 在程序退出时注册一个块以供执行。 类似于 END 语句,但 END 语句只注册一次块。 |
4 | autoload( classname, file) 注册第一次使用时从文件中加载的类类名。 classname 可以是字符串或符号。 |
5 | binding 返回当前变量和方法绑定。 返回的 Binding 对象可以作为第二个参数传递给 eval 方法。 |
6 | block_given? 如果使用 block 调用该方法,则返回 true。 |
7 | callcc {| c|...} 将 Continuation 对象 c 传递给块并执行该块。 callcc 可用于全局退出或循环构造。 |
8 | caller([ n]) 以 file:line 形式的字符串数组返回当前执行堆栈。 如果指定了 n,则从第 n 级向下返回堆栈条目。 |
9 | catch( tag) {...} 通过在其块执行期间调用的 throw 捕获非本地退出。 |
10 | chomp([ rs = $/]) 返回变量 $_ 的值,去掉结尾的换行符,将结果赋回 $_。 换行字符串的值可以用 rs 指定。 |
11 | chomp!([ rs = $/]) 从 $_ 中删除换行符,就地修改字符串。 |
12 | chop 返回 $_ 的值并删除其最后一个字符(一个字节),并将结果分配回 $_。 |
13 | chop! 从 $_ 中删除最后一个字符,修改字符串。 |
14 | eval( str[, scope[, file, line]]) 将 str 作为 Ruby 代码执行。 可以使用 scope 指定执行评估的绑定。 要编译的代码的文件名和行号可以使用 file 和 line 指定。 |
15 | exec( cmd[, arg...]) 通过运行命令cmd替换当前进程。 如果指定了多个参数,则在没有 shell 扩展的情况下执行该命令。 |
16 | exit([ result = 0]) 退出程序,返回result作为状态码。 |
17 | exit!([ result = 0]) 绕过退出处理(例如ensure等)杀死程序。 |
18 | fail(...) 参见 raise(...) |
19 | Float( obj) 将 obj 转换为浮点数后返回。 数值对象直接转换; nil 转换为 0.0; 考虑 0x、0b 基数前缀转换字符串。 其余部分使用 obj.to_f 进行转换。 |
20 | fork fork {...} 创建一个子进程。 nil 在子进程中返回,子进程的ID(整数)在父进程中返回。 如果指定了块,它将在子进程中运行。 |
21 | format( fmt[, arg...]) 参见 sprintf。 |
22 | gets([ rs = $/]) 从命令行或标准输入中读取指定的文件名。 可以使用 rs 显式指定记录分隔符字符串。 |
23 | global_variables 返回一个全局变量名数组。 |
24 | gsub( x, y) gsub( x) {...} 用 y 替换 $_ 中与 x 匹配的所有字符串。 如果指定了块,则匹配的字符串将替换为块的结果。 修改后的结果赋值给 $_. |
25 | gsub!( x, y) gsub!( x) {...} 执行与 gsub 相同的替换,只是字符串被原地更改。 |
26 | Integer( obj) 将 obj 转换为整数后返回。 数值对象直接转换; nil 转换为 0; 考虑 0x、0b 基数前缀转换字符串。 其余的使用 obj.to_i 进行转换。 |
27 | lambda {| x|...} proc {| x|...} lambda proc 将块转换为 Proc 对象。 如果未指定块,则转换与调用方法关联的块。 |
28 | load( file[, private = false]) 从文件加载一个Ruby程序。 与 require 不同,它不加载扩展库。 如果 private 为 true,则程序被加载到匿名模块中,从而保护调用程序的命名空间。 |
29 | local_variables 返回一个局部变量名数组。 |
30 | loop {...} 重复一段代码。 |
31 | open( path[, mode = "r"]) open( path[, mode = "r"]) {| f|...} 打开一个文件。 如果指定了块,则使用作为参数传递的打开的流执行该块。 块退出时文件会自动关闭。 如果 path 以管道 | 开头,则以下字符串作为命令运行,并返回与该进程关联的流。 |
32 | p( obj) 使用其检查方法(通常用于调试)显示 obj。 |
33 | print([ arg...]) 将 arg 打印到 $defout。 如果没有指定参数,则打印 $_ 的值。 |
34 | printf( fmt[, arg...]) 使用 sprintf 根据 fmt 格式化 arg 并将结果打印到 $defout。 有关格式规范,请参阅 sprintf 了解详细信息。 |
35 | proc {| x|...} proc 请参阅 lamda。 |
36 | putc( c) 将一个字符打印到默认输出 ($defout)。 |
37 | puts([ str]) 将字符串打印到默认输出 ($defout)。 如果字符串不以换行符结尾,则将换行符附加到字符串。 |
38 | raise(...) fail(...) 引发异常。 如果未指定异常类,则假定 RuntimeError。 调用 raise rescue 子句中没有参数会重新引发异常。 在救援子句之外这样做会引发无消息的RuntimeError。 fail 是 raise 的过时名称。 |
39 | rand([ max = 0]) 生成一个大于等于 0 且小于最大值的伪随机数。 如果 max 未指定或设置为 0,则将随机数作为大于等于 0 且小于 1 的浮点数返回。srand 可用于初始化伪随机数 溪流。 |
40 | readline([ rs = $/]) 除了在读取 EOF 时引发 EOFError 异常外,等效于 gets。 |
41 | readlines([ rs = $/]) 返回一个字符串数组,其中包含指定为命令行参数的文件名或标准输入的内容。 |
42 | require( lib) 在第一次调用时加载库(包括扩展库)lib。 require 不会多次加载同一个库。 如果 lib 中没有指定扩展名,require 会尝试向其添加 .rb、.so 等。 |
43 | scan( re) scan( re) {|x|...} 相当于 $_.scan。 |
44 | select( reads[, writes = nil[, excepts = nil[, timeout = nil]]]) 检查作为 IO 对象数组传递的三种 IO 对象输入、输出和异常的状态变化。 nil 传递给不需要检查的参数。 返回一个三元素数组,其中包含状态发生变化的 IO 对象的数组。 nil 超时返回。 |
45 | set_trace_func( proc) 设置跟踪处理程序。 proc 可以是字符串或 proc 对象。 set_trace_func 由调试器和分析器使用。 |
46 | sleep([ sec]) 暂停程序执行 sec 秒。 如果未指定 sec,则程序将永远挂起。 |
47 | split([ sep[, max]]) 相当于$_.split。 |
48 | sprintf( fmt[, arg...]) format( fmt[, arg...]) 返回一个字符串,其中 arg 根据 fmt 格式化。 格式化规范与 C 编程语言中的 sprintf 基本相同。 fmt 中的转换说明符(% 后跟转换字段说明符)被相应参数的格式化字符串替换。 下一节中给出了转换文件的列表。 |
49 | srand([ seed]) 初始化一个随机数数组。 如果未指定 seed,则使用种子的时间和其他系统信息执行初始化。 |
50 | String( obj) 使用 obj.to_s 将其转换为字符串后返回 obj。 |
51 | syscall( sys[, arg...]) 调用编号sys指定的操作系统调用函数。 sys 的数字和含义取决于系统。 |
52 | system( cmd[, arg...]) 执行 cmd 作为对命令行的调用。 如果指定了多个参数,则直接运行命令而不进行 shell 扩展。 如果返回状态为 0(成功),则返回 true。 |
53 | sub( x, y) sub( x) {...} 用 y 替换 $_ 中第一个匹配 x 的字符串。 如果指定了块,则匹配的字符串将替换为块的结果。 修改后的结果赋值给$_。 |
54 | sub!( x, y) sub!( x) {...} 执行与 sub 相同的替换,除了字符串被原地更改。 |
55 | test( test, f1[, f2]) 执行字符 test 指定的各种文件测试。 为了提高可读性,您应该使用 File 类方法(例如 File::readable?)而不是这个函数。 下一节将给出参数列表。 |
56 | throw( tag[, value = nil]) 跳转到带有符号或字符串标签的catch函数。 value 是 catch 使用的返回值。 |
57 | trace_var( var, cmd) trace_var( var) {...} 为全局变量设置跟踪。 变量名被指定为一个符号。 cmd 可以是字符串或 Proc 对象。 |
58 | trap( sig, cmd) trap( sig) {...} 设置信号处理程序。 sig 可以是字符串(如 SIGUSR1)或整数。 SIG 可以从信号名称中省略。 在进程终止之前调用 EXIT 信号或信号编号 0 的信号处理程序。 |
59 | untrace_var( var[, cmd]) 删除对全局变量的跟踪。 如果指定了 cmd,则仅删除该命令。 |
数字函数
这里是与数字相关的内置函数列表。 它们应该按如下方式使用 −
#!/usr/bin/ruby num = 12.40 puts num.floor # 12 puts num + 10 # 22.40 puts num.integer? # false as num is a float.
这将产生以下结果 −
12 22.4 false
序号 | 方法 & 描述 |
---|---|
1 | n + num n - num n * num n / num 执行算术运算:加法、减法、乘法和除法. |
2 | n % num 返回 n 的模数。 |
3 | n ** num 求幂。 |
4 | n.abs 返回 n 的绝对值。 |
5 | n.ceil 返回大于或等于 n 的最小整数。 |
6 | n.coerce( num) 返回一个包含 num 和 n 的数组,两者都可能转换为允许它们相互操作的类型。 用于数值运算符的自动类型转换。 |
7 | n.divmod( num) 返回一个数组,其中包含 n 除以 num 所得的商和模数。 |
8 | n.floor 返回小于或等于 n 的最大整数。 |
9 | n.integer? 如果 n 是整数,则返回 true。 |
10 | n.modulo( num) 返回通过将 n 除以 num 并用 floor 将商四舍五入获得的模数 |
11 | n.nonzero? 如果 n 不为零,则返回 n,否则返回 nil。 |
12 | n.remainder( num) 返回将 n 除以 num 并从商中去除小数后得到的余数。 result 和 n 始终具有相同的符号。 |
13 | n.round 返回 n 舍入到最接近的整数。 |
14 | n.truncate 将 n 作为整数返回,去除小数。 |
15 | n.zero? 如果 n 为 0,则返回零。 |
16 | n & num n | num n ^ num 按位运算:AND、OR、XOR 和反转。 |
17 | n << num n >> num 按位左移和右移。 |
18 | n[num] 返回从最低有效位开始的第 num 位的值,即 n[0]。 |
19 | n.chr 返回一个字符串,其中包含字符代码 n 的字符。 |
20 | n.next n.succ 返回 n 之后的下一个整数。 相当于 n + 1。 |
21 | n.size 返回 n 的机器表示中的字节数。 |
22 | n.step( upto, step) {|n| ...} 将块从 n 迭代到 upto,每次递增 step。 |
23 | n.times {|n| ...} 迭代块 n 次。 |
24 | n.to_f 将 n 转换为浮点数。 浮点转换可能会丢失精度信息。 |
25 | n.to_int 转换成整数后返回和。 |
浮点函数
序号 | 方法 & 描述 |
---|---|
1 | Float::induced_from(num) 返回将 num 转换为浮点数的结果。 |
2 | f.finite? 如果 f 不是无限且 f.nan 为假,则返回真。 |
3 | f.infinite? 如果 f 为正无穷则返回 1,如果负无穷则返回 -1,否则返回 nil。 |
4 | f.nan? 如果 f 不是有效的 IEEE 浮点数,则返回 true。 |
数学函数
序号 | 方法 & 描述 |
---|---|
1 | atan2( x, y) 计算反正切。 |
2 | cos( x) 计算 x 的余弦值。 |
3 | exp( x) 计算指数函数(e 的 x 次方)。 |
4 | frexp( x) 返回一个二元素数组,其中包含 x 的名义化分数和指数。 |
5 | ldexp( x, exp) 返回 x 乘以 2 的 exp 次方的值。 |
6 | log( x) 计算 x 的自然对数。 |
7 | log10( x) 计算 x 的以 10 为底的对数。 |
8 | sin( x) 计算 x 的正弦值。 |
9 | sqrt( x) 返回 x 的平方根。 x 必须是正数。 |
10 | tan( x) 计算 x 的正切。 |
转换字段说明符
函数sprintf(fmt[,arg...])和format(fmt[,arg...])返回一个字符串,其中arg根据fmt格式化。 格式化规范与 C 编程语言中的 sprintf 基本相同。 fmt 中的转换说明符(% 后跟转换字段说明符)被相应参数的格式化字符串替换。
序号 | 说明符 & 描述 |
---|---|
1 | b 二进制整数 |
2 | c 单个字符 |
3 | d,i 十进制整数 |
4 | e 指数符号(例如,2.44e6) |
5 | E 指数符号(例如,2.44E6) |
6 | f 浮点数(例如 2.44) |
7 | g 如果指数小于 -4 则使用 %e,否则使用 %f |
8 | G 如果指数小于 -4,则使用 %E,否则使用 %f |
9 | o 八进制整数 |
10 | s 使用 to_s 转换的字符串或任何对象 |
11 | u 无符号十进制整数 |
12. | x 十六进制整数(例如 39ff) |
13 | X 十六进制整数(例如 39FF) |
以下是使用示例 −
#!/usr/bin/ruby str = sprintf("%s\n", "abc") # => "abc\n" (simplest form) puts str str = sprintf("d=%d", 42) # => "d=42" (decimal output) puts str str = sprintf("%04x", 255) # => "00ff" (width 4, zero padded) puts str str = sprintf("%8s", "hello") # => " hello" (space padded) puts str str = sprintf("%.2s", "hello") # => "he" (trimmed by precision) puts str
这将产生以下结果 −
abc d = 42 00ff hello he
测试函数参数
函数test(test(test, f1[, f2]) 执行由字符test 指定的下列文件测试之一。 为了提高可读性,您应该使用 File 类方法(例如,File::readable?)而不是这个函数。
序号 | 参数 & 描述 |
---|---|
1 | ?r 调用者的有效 uid 是否可以读取 f1? |
2 | ?w 调用者的有效uid可以写f1吗? |
3 | ?x 调用者的有效uid可以执行f1吗? |
4 | ?o f1 是否归调用者的有效 uid 所有? |
5 | ?R 调用者的真实 uid 是否可以读取 f1? |
6 | ?W 调用者的真实uid可以写f1吗? |
7 | ?X 调用者的真实uid可以执行f1吗? |
8 | ?O f1 是否归调用者的真实 uid 所有? |
9 | ?e f1 存在吗? |
10 | ?z f1 的长度是否为零? |
11 | ?s f1 的文件大小(nil if 0) |
12 | ?f f1 是普通文件吗? |
13 | ?d f1 是目录吗? |
14 | ?l f1 是符号链接吗? |
15 | ?p f1 是命名管道(FIFO)吗? |
16 | ?S f1 是套接字吗? |
17 | ?b f1 是块设备吗? |
18 | ?c f1 是字符设备吗? |
19 | ?u f1 是否设置了 setuid 位? |
20 | ?g f1 是否设置了 setgid 位? |
21 | ?k f1 是否设置了粘性位? |
22 | ?M f1 的最后修改时间。 |
23 | ?A Last access time for f1. |
24 | ?C f1 的最后 inode 更改时间。 |
序号 | 参数 & 描述 |
---|---|
1 | ?= f1 和 f2 的修改时间是否相等? |
2 | ?> f1 的修改时间是否比 f2 更近? |
3 | ?< f1 的修改时间是否早于 f2 ? |
4 | ?- f1 是到 f2 的硬链接吗? |
以下是使用示例。 假设 main.rb 具有读、写和不执行权限 −
#!/usr/bin/ruby puts test(?r, "main.rb" ) # => true puts test(?w, "main.rb" ) # => true puts test(?x, "main.rb" ) # => false
这将产生以下结果 −
true false false