[No000010]Ruby 中一些百分号(%)的用法小结
#Ruby 中一些百分号(%)的用法小结
#这篇文章主要介绍了Ruby 中一些百分号(%)的用法小结,需要的朋友可以参考下
what_frank_said = "Hello!"
#%Q
#用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\")
puts %Q(1.Joe said: "Frank said: "#{what_frank_said}"") #“#”不能省
=begin 执行结果
=> "1.Joe said: "Frank said: "Hello!"""
=end
#(...)也可用其他非数字字母的符号或成对的符号代替, 诸如[...], !...!, +...+,{...}, <...>等.
#以下写法全部与上面等效:
puts %Q!2.Joe said: "Frank said: "#{what_frank_said}""!
puts %Q[3.Joe said: "Frank said: "#{what_frank_said}""]
puts %Q+4.Joe said: "Frank said: "#{what_frank_said}""+
#除此之外还可省略Q写作:
puts %/5.Joe said: "Frank said: "#{what_frank_said}""/
=begin 执行结果
=> "5.Joe said: "Frank said: "Hello!"""
=end
#%q
#与%Q类似, 但是表示的是单引号字符串
puts %q(6.Joe said: 'Frank said: "#{what_frank_said}"')
=begin 执行结果
=> "6.Joe said: 'Frank said: "#{what_frank_said}"'"
=end
#%W
#语法近似于%Q, 用于表示其中元素被双引号括起的数组.
foo = "Foo"
arr = %W(#{foo} Bar Bar\ with\ space)
puts arr #=> ["Foo", "Bar", "Bar with space"]
#%w
#用于表示其中元素被单引号括起的数组. 比较奇怪的是\(斜杠空格)会被转化成(空格), 但是其他的内容不会.
arrs = %w(a b c\ d \#e #{1}f g\h)
puts arrs #=> ["a", "b", "c d", "\#e", "#{1}f", "g\h"]
#%x
#使用`方法执行一段shell脚本并返回标准输出内容.
puts %x(echo foo:#{foo}) #=> "foo:Foo\n"
#%r
#语法近似于%Q, 用于正则表达式.
puts %r(/home/#{foo}) #=> "/\/home\/Foo/"
#%s
#用于表示symbol, 但是不会对其中表达式等内容进行转化
puts %s(foo) #=> :foo
puts %s(foo bar) #=> :"foo bar"
puts %s(#{foo} bar) #=> :"\#{foo} bar"
#%i
#Ruby 2.0 之后引入的语法, 用于生成一个symbol数组
sarr =%i(a b c) #=> [:a, :b, :c]
puts sarr
#总结:
#%{String} 用于创建一个使用双引号括起来的字符串
#%Q{String} 用于创建一个使用双引号括起来的字符串
puts %Q!Some String of “Characters”! #=>"Some String of /”Characters/”"
#%q{String} 用于创建一个使用单引号括起来的字符串
puts %q!Some String of “Characters”! #=>"Some String of “Characters”"
#%r{String} 用于创建一个正则表达式字面值
puts %r{/usr/bin/} #=> /\/usr\/bin\/
#%w{String} 用于将一个字符串以空白字符切分成一个字符串数组,进行较少替换
#%W{String} 用于将一个字符串以空白字符切分成一个字符串数组,进行较多替换
puts %W(North South East West) #=> ["North", "South", "East", "West"]
#%s{String} 用于生成一个符号对象
#%x{String} 用于执行String所代表的命令
#puts %x{ ls /usr/local } #=> `ls /usr/local` linux下运行
#PS:上面几个%表示法中用{}扩住了String,其实这个{} 只是一种分割符,可以换成别的字符,比如(),那么%表示法就是%(String),当然还可以是别的字符,对于非括号类型的分割符,左右两边要相同, 如%!String!
#下面我对这些表示法简单举几个例子:
#%{String}用于创建一个使用双引号括起来的字符串
#这个表示法与%Q{String}完全一样,这边直接句个例子看结果:
result = %{hello}
puts "result is: #{result}, Type is:#{result.class}"
#结果: result is: hello, Type is:String
#%Q{String}用于创建一个使用双引号括起来的字符串
#%q{String}用于创建一个使用单引号括起来的字符串
#从说明中可以看出这两个表示法的区别就是一个使用双引号,一个使用单引号。使用双引号的字符串会对字符串中的变量做较多替换,而单引号则做较少的替换,具 体看例子。先看%Q{String}:
world = "world"
result = %Q{hello #{world}}
puts "result is: #{result}, Type is:#{result.class}"
#结果: result is: hello world, Type is:String
#换成%q{String}:
world = "world"
result = %q{hello #{world}}
puts "result is: #{result}, Type is:#{result.class}"
#结果: result is: hello #{world}, Type is:String
#从上面的结果可以看出,较少替换的情况下,#{world}被解析成了字符串,而不会去计算这个变量中的值。
#%r{String}用于创建一个正则表达式字面值
#就像使用/reg/方式一样,看代码:
result = %r{world}
puts result =~ "hello --world"
puts "result is: #{result}, Type is:#{result.class}"
#结果: 8 result is: (?-mix:world), Type is:Regexp
#可以看出,world从第8个字符开始匹配
#%w{String}用于将一个字符串以空白字符切分成一个字符串数组,进行较少替换
#%W{String}用于将一个字符串以空白字符切分成一个字符串数组,进行较多替换
#这两个应该是大家见过最多的,用这个方式构造数组,可以省下一些逗号,Ruby真 是会惯坏大家,以后大家都不用标点符号了。
#同样给一个简单的例子:
result = %w{hello world}
puts "result is: #{result}, Type is:#{result.class}, length is:#{result.length}"
#结果:result is: ["hello", "world"], Type is:Array, length is:2
#%s{String}用于生成一个符号对象
#直接先上代码:
result = %s{hello world}
puts "result is: #{result}, Type is:#{result.class}"
sym = :"hello world"
puts "the two symbol is the same: #{sym == result}"
#结果:#result is: hello world, Type is:Symbol #the two symbol is the same: true
#可以看出,这两中方式生成的symbol对象完全一样
#%x{String}用于执行String所代表的命令,比如:
%x{notepad.exe} #可以启动windows下的记事本,这里我就不列结果了(那是一个大家熟悉的窗口)。
[No000010]Ruby 中一些百分号(%)的用法小结的更多相关文章
- 1:CSS中一些@规则的用法小结 2: @media用法详解
第一篇文章:@用法小结 第二篇文章:@media用法 第一篇文章:@用法小结 这篇文章主要介绍了CSS中一些@规则的用法小结,是CSS入门学习中的基础知识,需要的朋友可以参考下 at-rule ...
- opengl中VAO,VBO,IBO用法小结(zz) 【转】
http://cowboy.1988.blog.163.com/blog/static/751057982014380251300/ opengl中VAO,VBO,IBO用法小结 这三个玩意全面取代旧 ...
- opengl中VAO,VBO,IBO用法小结【转】
http://cowboy.1988.blog.163.com/blog/static/751057982014380251300/ opengl中VAO,VBO,IBO用法小结 这三个玩意全面取代旧 ...
- c#多线程中Lock()关键字的用法小结
本篇文章主要是对c#多线程中Lock()关键字的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段 ...
- go中整型的用法小结
示例 // 整型的用法小结 // 注意: // 整型变量在使用时,遵循保小不保大的原则 // 尽量使用占用空间小的数据类型 package main import ( "fmt" ...
- Android中static和final用法小结
Java关键字static.final使用小结 static 1. static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是 ...
- go中指针类型的用法小结
代码 // 指针的用法 package main import ( "fmt" ) func main() { var i int = 100 // 输出i的地址 fmt.Prin ...
- Java中static、final用法小结
一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引 ...
- Java中static、final用法小结(转)
一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引 ...
随机推荐
- sap后台作业管理/sap打印管理
sap后台作业管理: 后台作业,主要用于运行需要处理大量数据,对交互没有要求的程序.个人认为,简单的创建,配置和监控后台作业没有什么难度.后台作业管理最为困难的解决方案的取舍,系统负载的调控.失控的后 ...
- Hadoop 2.5.1集群安装配置
本文的安装只涉及了hadoop-common.hadoop-hdfs.hadoop-mapreduce和hadoop-yarn,并不包含HBase.Hive和Pig等. http://blog.csd ...
- SharePoint 2010 网站备份还原简单介绍
今天尝试了SharePoint2010网站的备份和还原,从网上搜一些文档看看,然后自己试试,感觉和2007的操作没什么太大的区别,跟大家分享下自己尝试的命令行方式和数据库的方式,2007自己常用的也是 ...
- 表达式语言EL
表达式语言EL 表达式语言 EL(Expression Language,表达式语言)主要是用在JSP页面中,用来辅助我们产生无脚本的JSP页面,此处的脚本指的是JSP中的Java代码. EL的语法是 ...
- android加固系列—4.加固前先学会破解,无源码调试apk
[版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5138585.html] 项目关键java代码为,将tv设置为从jni读取的字符串,这里的破解内 ...
- ios线程和GCD
1.什么是进程? 进程是指在系统中正在运行的一个应用程序.比如同时打开QQ.Xcode,系统就会分别启动2个进程.截图 2.什么是线程? 1).一个进程要想执行任务,必须得有线程(每一个进程至少要有一 ...
- Android studio git 本地仓库和远程仓库节点对比
1.初始状态 2.本地修改文件,然后commit 3.本地再次修改文件,然后commit 4.本地push 从上图可以看出,push完成后,本地仓库的节点和远程仓库的节点是一样的.
- TextView 字数限制
给大家推荐一个 无bug的 字数限制 http://blog.csdn.net/u012460084/article/details/50377928
- GCD同步异步 串行并行大解析
/** 核心概念 任务:block里需要执行的操作 队列:把任务添加进入队列中,按照先进先出的原则来执行任务 串行队列:一个一个的执行 并行队列:可以让多个任务并发(同时)执行(自动开启多个线程同时 ...
- iOS文件解压&&数据加密
一文件压缩.这里我们需要一个第三方SSZipArchive(需要添加libz.td) #import "ViewController.h" #import "SSZipA ...