Ruby - 内置函数

创建于 2024-12-03 / 25
字体: [默认] [大] [更大]

由于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 不同,它不加载扩展库。 如果 privatetrue,则程序被加载到匿名模块中,从而保护调用程序的命名空间。

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 子句中没有参数会重新引发异常。 在救援子句之外这样做会引发无消息的RuntimeErrorfail 是 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 并从商中去除小数后得到的余数。 resultn 始终具有相同的符号。

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


0 人点赞过