Ruby语言入门(8)- Kernel模块的内部函数
上一篇 / 下一篇 2013-01-29 16:36:05 / 个人分类:语言
下面是一些常用的kenerl方法
str
把字符串str当做外部命令来运行,并以字符串方式返回命令的输出。
Array(arg)
调用 arg.to_ary 或 arg.to_a 将参数转为数组并返回结果
a=Array("test")
a.class
=> Array
Float(arg)
将参数变为浮点数(Float)并返回结果.
puts Float("10")
=> 10.0
Integer(arg)
将参数变为整数(Fixnum,Bignum)并返回结果.对数值,字符串以外的对象使用to_i方法。
puts Integer("0d10")
=> 10
String(arg)
调用arg.to_s将参数变为字符串并返回结果。
a=String("test")
a.class
=> String
abort/abort(message)
以非正常方式结束Ruby程序的运行。
at_exit { .... }
在解释器结束工作之前执行指定的块。除去at_exit是个方法这点差异之外,它与END块所进行工作基本相同。
autoload(const_name, feature)/autoload?(const_name)
可以autoload任何类/模块的常数。
binding
生成并返回Binding对象。该对象包含变量、方法等的环境信息,它通常用作Eval的第二参数。
catch(tag) {|tag| .... }
运行块并返回它的值。若在块的运行过程中,遇到与tag同名的throw的话,将把throw的第二参数的值作为返回值。
ret = catch(:exit) {
throw :exit, 25
some_process()
}
puts ret
#=> 25
chop/chop!
将内部变量$_末尾的字符去掉(若末尾是"\r\n"则去掉2个字符)。chop不改变内部变量$_的内容,chop!改变内部变量$_的内容。
chomp([rs])/chomp!([rs])
去掉位于内部变量$_末尾且由rs指定的字符。
eval(expr[, binding[, fname[, lineno=1]]])
把字符串expr当作Ruby程序来运行并返回其结果。若给第二参数传递Proc对象或Binding对象的话,将在生成该对象的环境中对字符串进行计算。
def foo
a = 1
binding
end
eval("p a", foo)
# => 1
exec(command)/exec(program[, arg1[, arg2[, ...]]])
执行由command指定的命令.该命令将变成进程执行的代码,所以一旦启动成功,就不会再从该函数中返回.若启动失败,控制权重新回归ruby解释器,然后会引发Errno::EXXX异常.
exit([status])
终止Ruby程序的运行.若向status传递了一个整数的话,该整数就将成为Ruby命令的结束状态值.默认的结束状态值是0.
exit!([status])
以整数status为结束状态值来终止Ruby程序的运行.默认的结束状态值为-1. exit!与exit不同,它不会进行异常处理.在fork之后,若想终止子进程时可以使用该语句.
fork/fork { ... }
使用fork(2)系统调用来制作进程的拷贝.若在父进程中将返回子进程的进程ID,若在子进程中则返回nil.若指定一个块之后再进行调用,则会在生成的子进程中对该块进行计算.
gets([rs])/readline([rs])
Ruby解释器在运行时,会把从参数那里得到的文件(若没有的话,就利用标准输入)假设成一个虚拟文件(可以使用内部变量$<或ARGF访问该虚拟文件),然后从该虚拟文件中读入一行,并返回字符串.若到达文件尾部时返回nil.
使用rs指定的字符串作为行的切分符号.rs的默认值取自内部变量$/.读入的字符串也被存入内部变量$_中.
若将rs设为nil的话,则意味着读入文件的全部内容而忽略行的切分.若设为空字符串""的话,会把连续的换行当做行的切分符(段落模式).
readline的功能与gets相同,但是当它遇到文件结尾时会引发EOFError异常.
global_variables
返回程序中已定义的全局变量(以'$'开头的变量)名的数组.
gsub(pattern[, replace])
gsub!(pattern[, replace])
gsub(pattern) {|matched| ... }
gsub!(pattern) {|matched| ... }
在内部变量$_所包含的字符串中,将符合pattern的部分替换为replace,然后返回结果.若省略参数replace时,该方法将演变为迭代器,以块的计算值进行替换操作.将匹配的字符串以参数的形式传递给块.
$_ = "foobar"
puts gsub(/o+/) {|m|
m.upcase
}
# => "fOObar"
block_given?
若某方法带块则返回真,否则返回伪。
load(file[, priv])
加载Ruby程序file并予以执行.若file是绝对路径,则从file开始加载.若file是相对路径,则依次搜索内部变量$:所指定的路径,并加载第一个搜索到的文件.此时,若$:中的元素是以"~"(tilde)开头的话,就把它扩展为环境变量HOME的值.
若加载成功则返回true,若失败则引发LoadError异常.
[require与load之间的区别]
require对于相同的文件只会加载一次,而load则是无条件的加载.另外,require会自动补全扩展名,如.rb或.so等.而load则没有该功能.一般的典型用法是,使用require加载库,而使用load加载配置文件等.
local_variables
返回当前作用域中已定义的局部变量名的数组.
loop { ... }
(只要不被中断就)反复对块进行计算.
open(file[, mode[, perm]])/open(file[, mode[, perm]]) {|io| ... }
打开file并返回File对象.mode可以是下列,省略时默认为"r".
- "r", RDONLY: 以读取模式打开文件.
- "w", WRONLY|CREAT|TRUNC: 以写入模式打开文件.打开文件时,若文件已存在就清空文件内容.
- "a", WRONLY|CREAT|APPEND: 以写入模式打开文件.通常把写入内容添加到文件结尾.
若有"+"的话,就以读写两用模式(RDWR)打开文件:
- "r+": 将文件的读写位置设在开头.
- "w+": 与"r+"一样.打开文件时,若文件已存在就清空其内容.
- "a+": 与"r+"一样.打开文件时,若文件已存在,就把读写位置设在文件结尾.
可在上述任意一项后面添加"b"(如"r+b")标志.此时,将以二进制方式打开文件(只限于以文本/二进制方式来区分文件的系统).
第三参数perm与open(2)的第三参数是一样的,它以整数的形式说明了文件在CREAT时的访问权限。若第二参数不是数值形式的话,该参数将被忽略。它的默认值是0666。
若文件名以`|'开头时,其后的字符串会被当作命令来执行。另外,将生成管线(pipeline)来应对命令的标准输入输出。
若文件名为"|-"的话,open将生成Ruby的子进程,并返回与子进程之间的管道(pipe)(IO对象)。(此时的运作与IO.popen相同。File.open没有生成管线的功能)。
当open与块同时被调用时,open将打开文件并执行块,当块的运行终止后就关闭文件。此时返回块的计算结果。请看下例。
open(path, mode) do |f|
...
end
# 等效代码
f = open(path, mode)
begin
...
ensure
f.close
end
p(obj, [obj2, ...])
等同于print。
print([arg1[, arg2, ...]])
依次输出参数。若没有得到参数则输出变量$_的值。若把非字符串对象传给参数的话,将对该对象使用to_s方法将其变为字符串后输出。若是nil的话则输出字符串"nil"。
printf([port, ]format[, arg[, ...]])
类似于C语言的printf,它将按照format将参数格式化为字符串,然后输出到$>。当第一参数是IO的子类的实例时,将对该对象进行输出。若没有任何参数时,将不作反应。
proc { ... }
lambda { ... }
proc
lambda
在给出的块中生成过程对象(Proc的实例)并返回它(等同于Proc.new)。
若没有给出块的话,将返回主调(caller)方法所指的块。若主调方法没有块时,将引发ArgumentError异常。
putc(ch)
将字符ch输出到$>。若ch是数字的话,将输出对应于0~255的字符。若ch是字符串的话,将输出字符串中的第一个字符。
puts([obj[, obj2[, ....]]] )
依次将obj和换行符输出到$>。若没有参数的话则只会输出换行符。
若参数是数组,则依次输出数组元素和换行符。若将既非数组又非字符串的对象传递给参数时,将尝试使用to_ary方法将其化为数组,再使用to_s方法将其化为字符串。若是nil则输出字符串"nil"。
raise
raise(exception)
raise(message)
raise(error_type, message [, backtrace])
fail(error_type, message [, backtrace])
引发异常,若没有参数时,将再次引发本线程本块内最后被rescue的异常对象($!)。若没有这样的异常时,将引发RuntimeError异常。
begin
open("nonexist")
rescue
raise # => `open': No such file or directory - "nonexist" (Errno::ENOENT)
end
若只有一个参数,且该参数为字符串时,将以该字符串为message来引发RuntimeError异常。若该参数为异常类或异常对象时,将引发该异常。
raise "error message" # => -:1: error message (RuntimeError)
raise ArgumentError # => -:1: ArgumentError (ArgumentError)
raise ArgumentError.new # => -:1: ArgumentError (ArgumentError)
若有2或3个参数时,将以第二参数为message来引发第一参数所指的异常。此时是以异常类或异常对象来指定异常的。而第三参数则是发生异常时的栈跟踪(track trace),它的形式必须与caller的返回值一致。
raise ArgumentError, "error message"
# => -:1: error message (ArgumentError)
raise ArgumentError, "error message", ["file1:99","file2:999:in `method'"]
# => file1:99: error message (ArgumentError)
from file2:999:in `method'
若将非异常的类或对象赋予第一参数时,实际上发生的异常正是该对象的exception方法的返回值。
class MyException
def exception
ArgumentError.new
end
end
raise MyException.new
# => -:7: ArgumentError (ArgumentError)
若采用第二种形式来指定参数时,该参数将被赋予exception方法。
class MyException
def exception(mesg)
ArgumentError.new(mesg)
end
end
raise MyException.new, "error message"
# => -:7: error message (ArgumentError)
rand([max=0])
产生一个0至max(不含)之间的随机数。
require(feature)
从加载路径$:开始搜索Ruby库feature,若该库尚未被加载就立即加载。
scan(re)/scan(re) {|matched| ... }
与$_.scan一样。
select(reads[, writes[, excepts[, timeout]]])
与IO.select一样。
set_trace_func(trace_proc)
在Ruby解释器执行程序的过程中,每当发生方法调用或对表达式进行计算等事件时都将执行trace_proc过程对象
set_trace_func lambda {|event, file, line, id, binding, klass|
# ....
}
event表示发生事件的类别。详细内容如下:
- "line" ... 表达式的计算。
- "call" ... 方法调用。
- "return" ... 从方法调用中返回。
- "c-call" ... C(语言)方法的调用。
- "c-return" ... 从C(语言)方法调用中返回。
- "class" ... 进入类定义、特殊类定义或模块定义中。
- "end" ... 类定义、特殊类定义或模块定义的结束。
- "raise" ... 发生异常。
file运行中的程序的源文件名(字符串)。
line运行中的程序的源文件行号(整数)。
id根据event的不同,将使用下列之一。与第六个块参数klass相对应。
- line Symbol对象,它表示最后被调用的方法。在顶层中则为nil。
- call/return/c-call/c-return Symbol对象,它表示被调用/return的方法。
- class/end nil。
- raise Symbol对象,它表示最后被调用的方法。在顶层中则为nil。
binding Binding对象,它表示运行中的程序的状况(context)。
klass根据event的不同,将使用下列之一。与第四个块参数id相对应。
- line Class对象,它表示最后被调用的方法的所属类。在顶层中则为false。
- call/return/c-call/c-return Class对象,它表示被调用/return的方法的所属类。
- class/end false。
- raise Class对象,它表示最后被调用的方法的所属类。在顶层中则为false。
sleep([sec])
使程序暂停sec秒。也可以将sec设为浮点数。省略sec时,若没有显式地(SIGALRM或其他线程发出的Thread#run)终止睡眠的话,将一直sleep下去。返回值是实际睡眠的秒数(整数)
spawn(cmd, [arg, ...])
基本上等同于system,但它不会等待子进程的结束。返回生成的子进程的进程ID。
split([sep[, limit]])
使用sep模型将$_中的字符串分割成limit个部分后转化为数组,然后返回该数组。
sprintf(format ... )/format(format ... )
sprintf对format字符串进行解释,格式化参数后返回结果。使用format时,等同于sprintf。
srand([seed])
设定rand的随机数的种子,返回旧的初始值(第一次返回0)。若省略初始值时,则以当前时刻、进程ID或srand的调用次数为基础生成一个种子。
sub(pattern[, replace])
sub!(pattern[, replace])
sub(pattern) {|matched| ... }
sub!(pattern) {|matched| ... }
在内部变量$_所指的字符串中,将首个匹配pattern的部分替换为replace,然后返回结果.若省略参数replace时,该方法将变为迭代器,以块的计算值进行替换操作.将匹配的字符串以参数的形式传递给块
syscall(num, arg ... )
执行num号码所对应的系统调用。将第二参数以后的部分传给系统调用作为其参数。参数必须是字符串或整数。
system(command)
system(program[, arg1[, arg2[, ...]]])
执行command,成功(子进程以 status 0 的状态结束时)则返回真,失败(包括不能执行命令)则返回伪。可参照变量$?来获取结束状态值(status)。
trace_var(varname, hook)
trace_var(varname) {|newval| .... }
注册钩子以监视对全局变量varname所进行的赋值。varname可以是字符串或Symbol。这里所说的“全局变量”是指以“$”开头的变量,包括特殊变量。
untrace_var(varname[, hook])
取消与全局变量varname有关的钩子。若指定了hook的话,将只会取消该钩子。若省略hook或将其设为nil时,将取消varname所有的钩子。返回取消钩子的数组。
warn(mesg)
依次输出mesg和换行符到$stderr之中。若内部变量$VERBOSE为nil时,则不会输出。
TAG:
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | 5 | 6 | ||||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 |
我的存档
数据统计
- 访问量: 149820
- 日志数: 185
- 文件数: 6
- 建立时间: 2007-08-06
- 更新时间: 2015-01-06