- 浏览: 677872 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
zhouyicang:
为嘛人气不够,这么好的文章,我找了几十篇博客,才找到这篇解惑了 ...
HTML 块级元素/内联元素 -
young7:
不错,解惑了
HTML 块级元素/内联元素 -
lvjin948:
获取浏览器语言的完美方案。http://blog.csdn.n ...
JavaScript获取浏览器语言类型 -
tarena_hhh:
我用了css优化工具,发现他的顺序有很大不一样?????
CSS属性书写顺序及命名规则 -
deng131:
谢谢你的提醒,是有个地方写错了
javascript事件绑定addEventListener,attachEvent
局部域:在某一个线程作用域内才能有效,下列也可看做是线程内的局部变量。
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同$<
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同$<
发表评论
-
惯例优于配置原则
2010-07-21 10:42 1808惯例优于配置(Convention over Configur ... -
Ruby中AOP实现方法
2010-07-19 15:48 1134转自:http://blackanger.blog.51cto ... -
ruby中星号(*)作用
2010-07-19 11:50 11621,有正常的乘法功能 2*2 1*1 2,数组*intege ... -
字符,整数,字符串转换 pack,unpack
2010-07-19 11:45 1476字符串和整数的转换: ?a #显示a的ascii值 ... -
RPC与REST区别
2010-07-15 14:26 3511转自:http://georid.spaces.l ... -
RFC、RPC区别及解释
2010-06-09 09:07 2844RFC是request for comment的缩写,是由IE ... -
Comet 技术两种实现
2010-06-08 23:55 5492转自 http://ququzone.blogbus. ... -
Web服务器和Applicaion服务器
2010-06-08 18:41 1211Web服务器传送(serves)页 ... -
Mongrel Application服务器
2010-06-08 18:36 1014Mongrel是一种快速的针对Ruby的Http 服务器,专门 ... -
Nginx web服务器
2010-06-08 18:31 1121Nginx ("engine x") 是一 ... -
Ruby on Rails中YAML
2010-06-07 21:29 2025YAML YAML Ain't Markup Languag ... -
Web设计之REST架构风格
2010-06-07 21:16 1178REST架构风格是全新的针对Web应用的开发风格,是当今世界最 ... -
Ruby on Rails使用Haml
2009-12-10 18:56 163Haml是一种用来描述任何XHTML web document ... -
Rails render partial collection
2009-11-02 11:52 67ruby 1.8.7 + rails 2.1.0 Rails ... -
Rails Liquid邮件模板
2009-08-20 13:14 184允许用户自定义邮件模板样式 http://cjohansen. ... -
Rails类实列变量
2009-07-14 22:21 40D:\project\trunk\trunk>irb i ... -
Rails产品环境下Migration维护表
2009-07-13 17:01 48随着公司产品的上线,产品环境下就要求数据库表不能在重新执行ra ... -
FastCSV数据导出到csv文件
2009-06-03 13:17 267具体使用看Readme,下面介绍FastCSV在导出网站数据中 ... -
Rails开发系统添加WAP支持
2009-04-19 00:24 224Rails在WEB开发中独树一帜,取得相当大的成功,但是其内核 ... -
Rails迁移数据增加MYSQL函数Function
2009-04-10 13:15 78class CreateFunctions < Acti ...
相关推荐
- **变量**:Ruby中的变量无需声明类型,直接赋值即可使用。例如:`name = "John Doe"`。 - **数据类型**: - 字符串(String) - 数组(Array) - 哈希(Hash) - 数字(Numeric) - 布尔值(Boolean) #### ...
- **MRI内部机制**:MRI(Matz's Ruby Interpreter)是Ruby的标准实现,它通过GIL保证了内存安全性和数据一致性。 - **特殊情况:阻塞I/O操作**:当线程执行阻塞I/O操作时,GIL会被释放,允许其他线程执行。 #### ...
- **标准库**:Ruby自带的一系列库,提供各种常用功能,如文件操作、网络通信等。 - **Gem**:Ruby的包管理系统,允许开发者分享和安装第三方库。 6. **Rails框架** - **MVC模式**:Model-View-Controller架构,...
**数组**: 数组是Ruby中一种常用的数据结构,用来存储一系列有序的元素。例如: ```ruby array = [1, 2, 3] ``` **哈希**: 哈希(Hash)类似于字典,是一系列键值对的集合。例如: ```ruby hash = { 'key1' => '...
Ruby 支持多种类型的变量,包括局部变量、实例变量、类变量以及全局变量。 - 局部变量:以小写字母或下划线开头。 - 实例变量:以 `@` 符号开头。 - 类变量:以 `@@` 符号开头。 - 全局变量:以 `$` 符号开头。 ...
#### 六、Ruby常用库与框架 - **Ruby on Rails**:一款基于MVC模式的全栈Web开发框架。 - **Sinatra**:轻量级的Web应用开发框架,适用于小型项目或API服务。 - **其他常用库**:例如Nokogiri用于HTML/XML解析,...
- **强大的标准库**:Ruby拥有一个强大且丰富的标准库,支持多种常用的功能,如网络通信、文本处理等。 - **良好的社区支持**:Ruby有一个活跃且热情的社区,提供了大量的资源和支持。 #### 第二章 安装与初步体验 ...
通过源码,我们可以学习到这些常用功能的内部工作原理。 7. **并发与线程**:Ruby提供了线程支持,虽然GIL(全局解释器锁)限制了其在多核环境下的并行执行,但源码仍能展示如何实现线程安全的数据访问和控制流。 ...
- **变量声明**:RUBY中无需显式声明变量类型,通过赋值即可自动识别。 - **流程控制语句**:包括条件语句(if/elsif/else)、循环语句(while、for、until等)。 - **函数定义**:使用`def`关键字定义方法,RUBY中...
- **块**: Ruby中独特的概念之一,可以作为参数传递给方法,并在方法内部执行。 - **模块**: 用于组织代码,可以包含类方法和实例方法,也可以被混入到其他类中以实现继承的效果。 #### 四、Ruby高级特性 ##### ...
- FreeRIDE和SciTE是常用的Ruby IDE。 - 它们提供了代码高亮、自动补全等功能。 - **2.2.3 使用fxri:** - fxri是Ruby的一个文档查看工具,用于查阅Ruby标准库和第三方库的文档。 **2.3 Ruby-irb** - irb是Ruby...
实例变量以`@`符号开头,用于在对象内部存储数据。方法则是对象可以执行的操作,通过`def`关键字定义。方法可以访问和修改实例变量,实现对象的功能。 4. **类方法与对象方法** 类方法是直接关联到类对象的方法,...
- **局部变量**:作用域限制在定义它的方法内部。 - **实例变量**:以`@`开头,作用于整个类的所有实例。 - **类变量**:以`@@`开头,作用于整个类的所有实例及子类。 - **全局变量**:以`$`开头,可在程序的任何...
- **封装**:隐藏对象内部实现细节,仅暴露必要的接口供外部调用。 - **继承**:子类可以继承父类的属性和方法,并可以对其进行扩展或覆盖。 - **多态**:同一消息发送给不同的对象会产生不同的行为。 - **类与对象*...
- 常用选项及其功能介绍。 - **交互式Ruby Shell (irb) 的使用** - irb的基本操作与特点。 - 在irb中调试代码的方法。 - **代码文档化** - 使用RDoc或其他工具为项目添加文档。 - 文档化最佳实践。 - **Ruby...
- **变量定义**:使用标识符来命名变量,变量名以字母或下划线开头,可以包含字母、数字和下划线。 - **运算符**:支持常见的算术运算符(如+、-、*、/)、比较运算符(如==、!=、<、>)和逻辑运算符(如&&、||、!)...
- **局部变量**:作用域限于定义它的方法内部。 - **实例变量**:属于特定对象,在整个类的实例中有效。 - **类变量**:在整个类及其子类中有效。 - **全局变量**:在整个程序中有效。 - **常量**:用于表示固定不变...