- 浏览: 201410 次
- 来自: ...
-
文章分类
最新评论
-
赤道螞蟻:
如果是數據庫有定時任務,定時更新表的數據。 表中數據變化時,主 ...
用socket.io实现WebSocket的一个简单例子 -
cwalet:
在世界的中心呼喚愛 写道提示找不到 expressnpm in ...
用socket.io实现WebSocket的一个简单例子 -
在世界的中心呼喚愛:
提示找不到 express
用socket.io实现WebSocket的一个简单例子 -
Anleb:
def m1(a)
puts 'invoke m1'
pu ...
Ruby的一些疑问 -
biyeah:
补充,任何类,只要实现to_proc方法,都可以与&结 ...
Ruby的一些疑问
Ruby常用的内部变量
原文http://www.cnblogs.com/rubylouvre/archive/2009/07/23/1529237.html
作者:司徒正美
在ruby程序中,经常会看到一些以$开头的变量,这些不是指我们自己在程序中设置的全局变量,而是指系统内部已经设置好的变量,他们代表了一些特定的意思,下面搜集了一些常用的内部变量,用一些简单的代码说明他们代表的意思:
局部域:
在某一个线程作用域内才能有效,下列也可看做是线程内的局部变量。
PS:这边讲解的几个变量都是于正则匹配相关的,正则匹配过程的代码是一样的,这里不重复输入正则表达式匹配的代码,只在第一个例子里给出完整的输入和输出,之后的例子只直接输出变量的值。
$_
gets或readline最后读入的字符串,若遇到EOF则为nil。该变量的作用域是局部域。
irb(main):006:0> $_
=> nil
irb(main):007:0> gets
foobar
=> "foobar\n"
irb(main):008:0> $_
=> "foobar\n"
$&
在当前作用域中,正则表达式最后一次匹配成功的字符串,若最后一次匹配失败,则为nil。
irb(main):002:0> $&
=> nil
irb(main):010:0> /(foo)(bar)(BAZ)?/ =~ "foobarbaz"
=> 0
irb(main):011:0> $&
=> "foobar"
$~
在当前作用域中,最后一次匹配成功的相关信息(MatchData对象——为处理与正则表达式的匹配过程相关的信息而设置的类)。可以使用$~[n]的形式从该数据中抽取第n个匹配结果($n),相当于是$1、$2……等同于Regexp.last_match。
irb(main):012:0> $~
=> #<matchdata "foobar"="" 1:"foo"="" 2:"bar"="" 3:nil="">
irb(main):026:0> $1
=> "foo"
irb(main):027:0> $~[1]
=> "foo"
</matchdata>
$`
在当前作用域中,正则表达式最后一次匹配成功的字符串前面的字符串。若最后的匹配失败则为nil,等同于Regexp.last_match.pre_match。
irb(main):016:0> $`
=> "" #由于最后匹配成功的内容是foobar,输入的字符串前面没有别的字符所以是""
$'
在当前作用域中,正则表达式最后一次匹配成功的字符串后面的字符串。若最后的匹配失败则为nil,等同于Regexp.last_match.post_match。
irb(main):028:0> $'
=> "baz"
$+
在当前作用域中,正则表达式最后一次匹配成功的字符串部分中,与最后一个括号相对应的那部分字符串。若最后的匹配失败则为nil。在多项选择型匹配模型中,若您无法断定是哪个部分匹配成功时,该变量将会非常有用。
irb(main):029:0> $+
=> "bar"
$1
$2
$3 ...
在当前作用域中,正则表达式最后一次匹配成功的字符串部分中,与最后一个括号相对应的那部分字符串,若最后的匹配失败则为nil。在多项选择型匹配模型中,若您无法断定是哪个部分匹配成功时,该变量将会非常有用。
irb(main):029:0> $+
=> "bar"
线程局部域
下列变量在一个线程内部时是全局域变量,但在不同的线程之间是彼此独立的。
$!
最近发生的异常的信息,由raise设定。
def exception
begin
raise "exception test."
ensure
puts $!
end
end
exception
输出结果:
simple.rb:58:in `exception': exception test. (RuntimeError)
from simple.rb:64
exception test. # $!中的值
$@
以数组形式保存着发生异常时的back trace信息. 数组元素是字符串,它显示了方法调用的位置,其形式为 filename:line或 filename:line:in 'methodname'。在向$@赋值时,$!不能为nil。
def exception
begin
raise "exception test."
ensure
puts $@
puts "$@ size is:#{$@.size}"
end
end
exception
输出结果:
simple.rb:58:in `exception': exception test. (RuntimeError)
from simple.rb:65
simple.rb:58:in `exception' #$@中的值,是一个数组,第一个元素是错误发生的行数,第二个是异常的内容。下面打印了数组的长度
simple.rb:65
$@ size:2
全局域
这种类型的变量是整个应用中都可以访问的,而且是同一个变量的引用。
$/
输入记录分隔符。默认值为"\n"。
irb(main):076:0> $/ #初始的输入分割符
=> "\n"
irb(main):077:0> gets
=> "\n"
irb(main):078:0> "test" #输入回车之后,默认插入"\n",输入结束
=> "test"
irb(main):079:0> $/="@" #修改输入符为"@"
=> "@"
irb(main):080:0> gets #输入回车之后没有结束读取进程,直到输入"@"之后结束
test
@
=> "test\n@"
$\
输出记录分隔符。print会在最后输出该字符串。默认值为nil,此时不会输出任何字符。
irb(main):082:0> print "abc"
abc=> nil
irb(main):083:0> $\="@"
=> "@"
irb(main):084:0> print "abc"
abc@=> nil
$,
默认的切分字符。若Array#join中省略了参数时或在print的各个参数间将会输出它。默认值为 nil ,等同于空字符串。
irb(main):087:0> ["a","b","c"].join
=> "abc"
irb(main):088:0> $,="," #修改切分字符为","
=> ","
irb(main):089:0> ["a","b","c"].join #输出结果改变
=> "a,b,c"
irb(main):090:0>
$;
当String#split中省略参数时的切分字符。默认值为nil,此时将进行特殊的分割。
irb(main):090:0> $;
=> nil
irb(main):091:0> "abc".split #默认的切分字符情况下,把整个字符当成一个元素
=> ["abc"]
irb(main):092:0> $;="b"
=> "b"
irb(main):093:0> "abc".split #以"b"为切分字符情况下,把整个字符当成两个元素
=> ["a", "c"]
$*
传递给Ruby脚本的参数.内部常数ARGV的别名。
$$
当前运行中的Ruby进程的pid。
irb(main):094:0> $$
=> 5167
$:
$LOAD_PATH
包含一个数组,其内容是load或require加载文件时用的搜索目录列表。
irb(main):095:0> $:
=> ["/usr/local/lib/site_ruby/1.8", "/usr/local/lib/site_ruby/1.8/i486-linux", "/usr/local/lib/site_ruby/1.8/i386-linux", "/usr/local/lib/site_ruby", "/usr/lib/ruby/vendor_ruby/1.8", "/usr/lib/ruby/vendor_ruby/1.8/i486-linux", "/usr/lib/ruby/vendor_ruby", "/usr/lib/ruby/1.8", "/usr/lib/ruby/1.8/i486-linux", "/usr/lib/ruby/1.8/i386-linux", "."]
irb(main):096:0> $LOAD_PATH
=> ["/usr/local/lib/site_ruby/1.8", "/usr/local/lib/site_ruby/1.8/i486-linux", "/usr/local/lib/site_ruby/1.8/i386-linux", "/usr/local/lib/site_ruby", "/usr/lib/ruby/vendor_ruby/1.8", "/usr/lib/ruby/vendor_ruby/1.8/i486-linux", "/usr/lib/ruby/vendor_ruby", "/usr/lib/ruby/1.8", "/usr/lib/ruby/1.8/i486-linux", "/usr/lib/ruby/1.8/i386-linux", "."]
全局常量
ENV
包含程序的环境变量,是一个Hash对象。
irb(main):006:0> ENV.each{|k,v| puts "#{k}=>#{v}"}
ALLUSERSPROFILE=>C:\Documents and Settings\All Users
APPDATA=>C:\Documents and Settings\xp2008\Application Data
CLASSPATH=>.;C:\Program Files\Ringz Studio\Storm Codec\QTSystem\QTJava.zip
CLIENTNAME=>Console
CommonProgramFiles=>C:\Program Files\Common Files
COMPUTERNAME=>HOOOPO
ComSpec=>C:\WINDOWS\system32\cmd.exe
FP_NO_HOST_CHECK=>NO
HOME=>C:\Documents and Settings\xp2008
HOMEDRIVE=>C:
#==============下略============
#==============下略============
DATA
读取__END__后程序行的输入流。如果__END__未出现在代码中则无定义。
STDERR,STDIN,STDOUT
标准输入、输出、错误流
RUBY_PLATFORM
ruby解释器平台
irb(main):008:0> RUBY_PLATFORM
=> "i386-mswin32"
ARGF同$* , ARGF同$<
原文http://www.cnblogs.com/rubylouvre/archive/2009/07/23/1529237.html
作者:司徒正美
在ruby程序中,经常会看到一些以$开头的变量,这些不是指我们自己在程序中设置的全局变量,而是指系统内部已经设置好的变量,他们代表了一些特定的意思,下面搜集了一些常用的内部变量,用一些简单的代码说明他们代表的意思:
局部域:
在某一个线程作用域内才能有效,下列也可看做是线程内的局部变量。
PS:这边讲解的几个变量都是于正则匹配相关的,正则匹配过程的代码是一样的,这里不重复输入正则表达式匹配的代码,只在第一个例子里给出完整的输入和输出,之后的例子只直接输出变量的值。
$_
gets或readline最后读入的字符串,若遇到EOF则为nil。该变量的作用域是局部域。
irb(main):006:0> $_
=> nil
irb(main):007:0> gets
foobar
=> "foobar\n"
irb(main):008:0> $_
=> "foobar\n"
$&
在当前作用域中,正则表达式最后一次匹配成功的字符串,若最后一次匹配失败,则为nil。
irb(main):002:0> $&
=> nil
irb(main):010:0> /(foo)(bar)(BAZ)?/ =~ "foobarbaz"
=> 0
irb(main):011:0> $&
=> "foobar"
$~
在当前作用域中,最后一次匹配成功的相关信息(MatchData对象——为处理与正则表达式的匹配过程相关的信息而设置的类)。可以使用$~[n]的形式从该数据中抽取第n个匹配结果($n),相当于是$1、$2……等同于Regexp.last_match。
irb(main):012:0> $~
=> #<matchdata "foobar"="" 1:"foo"="" 2:"bar"="" 3:nil="">
irb(main):026:0> $1
=> "foo"
irb(main):027:0> $~[1]
=> "foo"
</matchdata>
$`
在当前作用域中,正则表达式最后一次匹配成功的字符串前面的字符串。若最后的匹配失败则为nil,等同于Regexp.last_match.pre_match。
irb(main):016:0> $`
=> "" #由于最后匹配成功的内容是foobar,输入的字符串前面没有别的字符所以是""
$'
在当前作用域中,正则表达式最后一次匹配成功的字符串后面的字符串。若最后的匹配失败则为nil,等同于Regexp.last_match.post_match。
irb(main):028:0> $'
=> "baz"
$+
在当前作用域中,正则表达式最后一次匹配成功的字符串部分中,与最后一个括号相对应的那部分字符串。若最后的匹配失败则为nil。在多项选择型匹配模型中,若您无法断定是哪个部分匹配成功时,该变量将会非常有用。
irb(main):029:0> $+
=> "bar"
$1
$2
$3 ...
在当前作用域中,正则表达式最后一次匹配成功的字符串部分中,与最后一个括号相对应的那部分字符串,若最后的匹配失败则为nil。在多项选择型匹配模型中,若您无法断定是哪个部分匹配成功时,该变量将会非常有用。
irb(main):029:0> $+
=> "bar"
线程局部域
下列变量在一个线程内部时是全局域变量,但在不同的线程之间是彼此独立的。
$!
最近发生的异常的信息,由raise设定。
def exception
begin
raise "exception test."
ensure
puts $!
end
end
exception
输出结果:
simple.rb:58:in `exception': exception test. (RuntimeError)
from simple.rb:64
exception test. # $!中的值
$@
以数组形式保存着发生异常时的back trace信息. 数组元素是字符串,它显示了方法调用的位置,其形式为 filename:line或 filename:line:in 'methodname'。在向$@赋值时,$!不能为nil。
def exception
begin
raise "exception test."
ensure
puts $@
puts "$@ size is:#{$@.size}"
end
end
exception
输出结果:
simple.rb:58:in `exception': exception test. (RuntimeError)
from simple.rb:65
simple.rb:58:in `exception' #$@中的值,是一个数组,第一个元素是错误发生的行数,第二个是异常的内容。下面打印了数组的长度
simple.rb:65
$@ size:2
全局域
这种类型的变量是整个应用中都可以访问的,而且是同一个变量的引用。
$/
输入记录分隔符。默认值为"\n"。
irb(main):076:0> $/ #初始的输入分割符
=> "\n"
irb(main):077:0> gets
=> "\n"
irb(main):078:0> "test" #输入回车之后,默认插入"\n",输入结束
=> "test"
irb(main):079:0> $/="@" #修改输入符为"@"
=> "@"
irb(main):080:0> gets #输入回车之后没有结束读取进程,直到输入"@"之后结束
test
@
=> "test\n@"
$\
输出记录分隔符。print会在最后输出该字符串。默认值为nil,此时不会输出任何字符。
irb(main):082:0> print "abc"
abc=> nil
irb(main):083:0> $\="@"
=> "@"
irb(main):084:0> print "abc"
abc@=> nil
$,
默认的切分字符。若Array#join中省略了参数时或在print的各个参数间将会输出它。默认值为 nil ,等同于空字符串。
irb(main):087:0> ["a","b","c"].join
=> "abc"
irb(main):088:0> $,="," #修改切分字符为","
=> ","
irb(main):089:0> ["a","b","c"].join #输出结果改变
=> "a,b,c"
irb(main):090:0>
$;
当String#split中省略参数时的切分字符。默认值为nil,此时将进行特殊的分割。
irb(main):090:0> $;
=> nil
irb(main):091:0> "abc".split #默认的切分字符情况下,把整个字符当成一个元素
=> ["abc"]
irb(main):092:0> $;="b"
=> "b"
irb(main):093:0> "abc".split #以"b"为切分字符情况下,把整个字符当成两个元素
=> ["a", "c"]
$*
传递给Ruby脚本的参数.内部常数ARGV的别名。
$$
当前运行中的Ruby进程的pid。
irb(main):094:0> $$
=> 5167
$:
$LOAD_PATH
包含一个数组,其内容是load或require加载文件时用的搜索目录列表。
irb(main):095:0> $:
=> ["/usr/local/lib/site_ruby/1.8", "/usr/local/lib/site_ruby/1.8/i486-linux", "/usr/local/lib/site_ruby/1.8/i386-linux", "/usr/local/lib/site_ruby", "/usr/lib/ruby/vendor_ruby/1.8", "/usr/lib/ruby/vendor_ruby/1.8/i486-linux", "/usr/lib/ruby/vendor_ruby", "/usr/lib/ruby/1.8", "/usr/lib/ruby/1.8/i486-linux", "/usr/lib/ruby/1.8/i386-linux", "."]
irb(main):096:0> $LOAD_PATH
=> ["/usr/local/lib/site_ruby/1.8", "/usr/local/lib/site_ruby/1.8/i486-linux", "/usr/local/lib/site_ruby/1.8/i386-linux", "/usr/local/lib/site_ruby", "/usr/lib/ruby/vendor_ruby/1.8", "/usr/lib/ruby/vendor_ruby/1.8/i486-linux", "/usr/lib/ruby/vendor_ruby", "/usr/lib/ruby/1.8", "/usr/lib/ruby/1.8/i486-linux", "/usr/lib/ruby/1.8/i386-linux", "."]
全局常量
ENV
包含程序的环境变量,是一个Hash对象。
irb(main):006:0> ENV.each{|k,v| puts "#{k}=>#{v}"}
ALLUSERSPROFILE=>C:\Documents and Settings\All Users
APPDATA=>C:\Documents and Settings\xp2008\Application Data
CLASSPATH=>.;C:\Program Files\Ringz Studio\Storm Codec\QTSystem\QTJava.zip
CLIENTNAME=>Console
CommonProgramFiles=>C:\Program Files\Common Files
COMPUTERNAME=>HOOOPO
ComSpec=>C:\WINDOWS\system32\cmd.exe
FP_NO_HOST_CHECK=>NO
HOME=>C:\Documents and Settings\xp2008
HOMEDRIVE=>C:
#==============下略============
#==============下略============
DATA
读取__END__后程序行的输入流。如果__END__未出现在代码中则无定义。
STDERR,STDIN,STDOUT
标准输入、输出、错误流
RUBY_PLATFORM
ruby解释器平台
irb(main):008:0> RUBY_PLATFORM
=> "i386-mswin32"
ARGF同$* , ARGF同$<
发表评论
-
在Rails中使用Pry
2012-02-07 06:43 2140Pry可看成是IRB的加强版。支持语法高亮等特点。 1、在Ge ... -
camping 一个小巧的ruby web framework
2012-02-04 04:01 1769https://github.com/camping/camp ... -
Markaby (Markup as Ruby)
2012-02-04 03:58 1151http://markaby.rubyforge.org/ ... -
Ruby的一些疑问
2012-01-26 01:01 13961、网点看到一断程序, def m1(a) puts 'i ... -
RSpec测试框架
2012-01-10 12:59 2960#参考http://www.slideshare.net/ih ... -
[转]Ruby - DUP vs CLONE
2012-01-09 12:57 1801http://railsblogger.blogspot.co ... -
[转]eval, class_eval, instance_eval和binding
2012-01-09 12:10 1073http://www.cnblogs.com/rubylouv ... -
[转]Ruby中的binding
2012-01-09 11:50 1555http://kkito.cn/index.php/blog/ ... -
[转]Method visibility in Ruby
2012-01-04 12:37 1132From:http://weblog.jamisbuck.or ... -
[转]浅谈Ruby on Rails中的include和extend
2011-12-30 02:20 1026http://developer.51cto.com/art/ ... -
[转]Ruby中的Rake任务详述
2011-12-29 03:47 1729Trackback: http://tb.blog.csdn. ... -
[转]ruby中的闭包
2011-12-26 10:42 2744原文: http://kenbeit.com/po ... -
ruby技巧
2011-12-26 10:40 0ruby小技巧之 http://kenbeit.com/pos ... -
[转]Ruby中的多态
2011-12-20 11:56 0原文http://kkito.cn/index.php ... -
ruby中实现闭包
2011-12-20 09:10 930ruby中实现闭包很简单 如果一个方法中返回一个proced ... -
ruby中星号的使用
2011-12-20 05:54 1882ruby中星号的使用 1、数字乘法 2 * 3 = 6 2 ... -
[转]ruby的include与extend
2011-12-20 05:09 880原文http://www.cnblogs.com/rubylo ... -
ruby与javascript面向对象编程的比较
2011-12-06 14:05 3321原文:http://howtonode.org/object- ... -
解决ruby中文乱码
2011-12-06 04:20 7992在文件头加上#encoding=UTF-8,示例: #enco ... -
[转帖]重新认识Ruby的多态和duck type
2011-12-05 11:56 963多态在Java中是如何定义的? 原文:http://devel ...
相关推荐
- **标准库**:Ruby自带的一系列库,提供各种常用功能,如文件操作、网络通信等。 - **Gem**:Ruby的包管理系统,允许开发者分享和安装第三方库。 6. **Rails框架** - **MVC模式**:Model-View-Controller架构,...
通过源码,我们可以学习到这些常用功能的内部工作原理。 7. **并发与线程**:Ruby提供了线程支持,虽然GIL(全局解释器锁)限制了其在多核环境下的并行执行,但源码仍能展示如何实现线程安全的数据访问和控制流。 ...
实例变量以`@`符号开头,用于在对象内部存储数据。方法则是对象可以执行的操作,通过`def`关键字定义。方法可以访问和修改实例变量,实现对象的功能。 4. **类方法与对象方法** 类方法是直接关联到类对象的方法,...
在这个实验室中,可能涉及到如何在Ruby类中定义和使用方法来读取和设置对象的内部状态,也就是属性。 描述中的"ruby-oo-fundamentals-attribute-accessors-lab-sea01-seng-ft-071320-master.rar"提示这是一个压缩...
这包括对垃圾回收算法的改进,减少了不必要的内存占用,以及对常用操作的底层优化,如数组和哈希表的处理。 其次,Ruby 2.7.2引入了块参数解构赋值的功能,允许开发者更方便地处理传入的块参数。例如,可以一次性将...
在Ruby on Rails框架中,页面中的常用函数是构建动态网页的关键元素。`list.rhtml`是一个典型的Rails视图模板文件,用于渲染HTML并结合服务器端的逻辑。在本例中,我们将深入探讨`list.rhtml`文件可能包含的Rails...
总的来说,学习Ruby意味着你需要掌握其基本语法、面向对象特性、元编程、常用的类库和框架,以及如何利用这些工具构建实际项目。Ruby的世界充满了创新和活力,无论是初学者还是经验丰富的开发者,都能在这里找到属于...
- **内建函数**:RISP会实现一系列基本的Lisp函数,如`+`、`-`、`*`、`car`、`cdr`等,以及Ruby中的常用操作,如数组操作和控制流。 - **用户自定义函数**:RISP应该支持定义和调用用户自定义的函数,这需要实现一...
10. **测试驱动开发**:Ruby常用的测试框架有RSpec和Minitest,它们鼓励开发者先编写测试,再编写实现代码,以确保代码质量。 在"aA_Homework-main"这个目录下,学生可能需要完成各种练习,涉及上述各个知识点的...
* `<var>`:定义文本的变量部分 * `<wbr>`:定义视频 表单标签 * `<form>`:定义供用户输入的HTML表单 * `<input>`:定义输入控件 * `<textarea>`:定义多行的文本输入控件 * `<button>`:定义按钮 * `<select>`:...
2. **新语法高亮**:增加了对更多编程语言的语法高亮支持,如Python、Ruby等,提高代码可读性。 3. **多窗口编辑**:允许用户同时打开并编辑多个文件,提高了工作效率。 4. **脚本语言增强**:Vim脚本语言(Vim...
Ruby中的块是一段可以在函数或方法内部执行的代码,由`do..end`或花括号`{}`包围。块可以和迭代器配合使用,例如`each`,按照特定顺序处理集合元素。块可以捕获并存储其外部作用域的变量,形成闭包,这在处理异步...
Ruby中的`yield`关键字用于在方法内部调用代码块,这使得方法能够灵活地执行用户自定义的行为。 **6. Ruby on Rails:** Ruby最有影响力的应用框架是Ruby on Rails(简称Rails),它是一个用于构建Web应用的全栈...
1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6 1.3.2 Java程序的运行机制和JVM 6 1.4 开发Java的准备 7 1.4.1 安装JDK 8 学生提问:不是说JVM是...
15.2.2 局部变量与局部内部类 329 15.2.3 静态方法中的局部内部类 331 15.3 静态内部类 332 15.3.1 语法规则 332 15.3.2 创建静态内部类的对象 332 15.3.3 静态/非静态内部类的区别 333 15.4 匿名内部...
"pdumpfs_container" 是一个基于 ...同时,熟悉 Ruby 语言的基本语法和常用库也是必不可少的。在遇到问题时,查阅官方文档、搜索在线论坛(如 Stack Overflow)上的讨论,或者直接联系项目维护者都是有效的求助方式。
* `<area>`:定义图像映射内部的区域 * `<map>`:定义图像映射 * `<object>`:定义内嵌对象 * `<param>`:定义对象的参数 * `<audio>`:定义声音内容 * `<video>`:定义视频内容 * `<source>`:定义媒介源 * `...
编辑器的一大亮点是其代码补全功能,能够根据上下文提供代码建议,帮助开发者快速输入常用的函数、类或变量名,提高编码效率。这对于学习新语言或记忆大量API的开发者来说非常实用。 3. **编译与调试工具** ...
6. **调试支持**:VS Code拥有强大的调试工具,支持多种编程语言,允许用户设置断点、查看变量值、单步执行等。 7. **源代码管理**:内置的源代码管理视图可以帮助开发者跟踪和比较文件的修改历史。 8. **多语言...