[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关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引 ...
随机推荐
- Snort - manual 笔记(一)
Chapter 1 Snort Overview This manual is based on Writing Snort Rules by Martin Roesch and further wo ...
- 关于web软件信息安全问题防护资料的整理(二)
想要做好软件的安全防护,首先就得了解web系统的安全威胁,那么web系统都存在哪些威胁呢? 应用层攻击.网络层攻击和混合攻击. 传统被动.单点以及彼此孤立的防护手段已不能应对越来越严峻的安全威胁. 改 ...
- Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer
Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer 1. Java NIO(New Input/Output)1 1.1. 变更通知(因为每个事件都需要一个监听者 ...
- 基于 VLC 的 Android 多媒体解决方案
前段时间项目中需要在 Android 中播放视频.流媒体.查看监控,就研究了一下 Android 多媒体解决方案. 查找了一下,大致有如下几种: Android MediaPlayer FFmpeg ...
- 【iOS】block的使用
Block 是iOS在4.0之后新增的程式语法,一般用于回调方法,功能上和delegate类似.本文将讲解block的几种常见的使用方法,当然,block中最值得注意的还是它的内存管理,我将在< ...
- Android对话框
这周过的实在是艰辛,自打这周二起我的本本就开始闹"罢工",最后还是重装系统了事. . . 只是可怜了我的那些被格了的软件(悲伤辣么大)! 往事不要再提,人生几度风雨... 简 ...
- iOS开发--Swift 如何完成工程中Swift和OC的混编桥接(Cocoapods同样适用)
由于SDK现在大部分都是OC版本, 所以假如你是一名主要以Swift语言进行开发的开发者, 就要面临如何让OC和Swift兼容在一个工程中, 如果你没有进行过这样的操作, 会感觉异常的茫然, 不用担心 ...
- 【读书笔记】iOS-使用Web Service-基于客户端服务器结构的网络通信(一)
Web Service技术是一种通过Web协议提供服务,保证不同平台的应用服务可以互操作,为客户端程序提供不同的服务. 目前3种主流的Web Service实现方案用:REST,SOAP和XML-RP ...
- [读书笔记] CSS权威指南1: 选择器
通配选择器 可以与任何元素匹配,就像是一个通配符 /*每一个元素的字体都设置为红色*/ * { color: red; } 元素选择器 指示文档元素的选择器. /*为body的字体设置为红色*/ bo ...
- mac PHP配置
apache默认路径配置方法 apache的配置 apache已经自带了,只需如下三个命令就可以了. 开启apache服务 sudo apachectl start 停止apache服务 sudo ...