Ruby支持的数据类型包括基本的Number、String、Ranges、Symbols,以及true、false和nil这几个特殊值,同时还有两种重要的数据结构——Array和Hash。
1、整型(Integer)
整型分两种,如果在31位以内(四字节),那为Fixnum实例。如果超过,即为Bignum实例。
整数范围从 -230 到 230-1 或 -262 到 262-1。在这个范围内的整数是类 Fixnum 的对象,在这个范围外的整数存储在类 Bignum 的对象中。
您可以在整数前使用一个可选的前导符号,一个可选的基础指标(0 对应 octal,0x 对应 hex,0b 对应 binary),后跟一串数字。下划线字符在数字字符串中被忽略。
您可以获取一个 ASCII 字符或一个用问号标记的转义序列的整数值。
实例
123 # Fixnum 十进制
1_234 # Fixnum 带有下划线的十进制
-500 # 负的 Fixnum
0377 # 八进制
0xff # 十六进制
0b1011 # 二进制
?a # 'a' 的字符编码
?\n # 换行符(0x0a)的编码
12345678901234567890 # Bignum
#整型 Integer 以下是一些整型字面量
#字面量(literal):代码中能见到的值,数值,bool值,字符串等都叫字面量
#如以下的0,1_000_000,0xa等
a1=0
#带千分符的整型
a2=1_000_000
#其它进制的表示
a3=0xa
puts a1,a2
puts a3
#puts print 都是向控制台打印字符,其中puts带回车换行符
=begin
这是注释,称作:嵌入式文档注释
类似C#中的/**/
=end
浮点型
Ruby 支持浮点数。它们是带有小数的数字。浮点数是类 Float 的对象,且可以是下列中任意一个。
实例
123.4 # 浮点值
1.0e6 # 科学记数法
4E20 # 不是必需的
4e+20 # 指数前的符号
#浮点型
f1=0.0
f2=2.1
f3=1000000.1
puts f3
算术操作
加减乘除操作符:+-*/
;指数操作符为**
指数不必是整数,例如
#指数算术
puts 2**(1/4)#1与4的商为0,然后2的0次方为1
puts 16**(1/4.0)#1与4.0的商为0.25(四分之一),然后开四次方根
字符串类型
Ruby 字符串简单地说是一个 8 位字节序列,它们是类 String 的对象。
双引号标记的字符串允许替换和使用反斜线符号,单引号标记的字符串不允许替换,且只允许使用 \\
和 \'
两个反斜线符号。
实例
#!/usr/bin/ruby -w
puts 'escape using "\\"';
puts 'That\'s right';
实例
#!/usr/bin/ruby -w
puts 'escape using "\\"';
puts 'That\'s right';
这将产生以下结果:
escape using "\"
That's right
您可以使用序列 #{ expr }
替换任意 Ruby 表达式的值为一个字符串。在这里,expr 可以是任意的 Ruby 表达式。
#!/usr/bin/ruby -w
puts "Multiplication Value : #{24*60*60}";
这将产生以下结果:
Multiplication Value : 86400
#!/usr/bin/ruby -w
name="Ruby"
puts name
puts "#{name+",ok"}"
输出结果为:
Ruby
Ruby,ok
反斜线符号
下表列出了 Ruby 支持的反斜线符号:
符号 | 表示的字符 |
---|---|
\n | 换行符 (0x0a) |
\r | 回车符 (0x0d) |
\f | 换页符 (0x0c) |
退格键 | (0x08) |
\a | 报警符 Bell (0x07) |
\e | 转义符 (0x1b) |
\s | 空格符 (0x20) |
\nnn | 八进制表示法 (n 是 0-7) |
\xnn | 十六进制表示法 (n 是 0-9、a-f 或 A-F) |
\cx, \C-x | Control-x |
\M-x | Meta-x (c | 0x80) |
\M-\C-x | Meta-Control-x |
\x | 字符 x |
如需了解更多有关 Ruby 字符串的细节,请查看 Ruby 字符串(String)。
数组
数组字面量通过[]中以逗号分隔定义,且支持range定义。
(1)数组通过[]索引访问 (2)通过赋值操作插入、删除、替换元素 (3)通过+,-号进行合并和删除元素,且集合做为新集合出现 (4)通过«号向原数据追加元素 (5)通过*号重复数组元素 (6)通过|和&符号做并集和交集操作(注意顺序)
实例
#!/usr/bin/ruby
ary = [ "fred", 10, 3.14, "This is a string", "last element", ]
ary.each do |i|
puts i
end
运行实例 »
这将产生以下结果:
fred
10
3.14
This is a string
last element
如需了解更多有关 Ruby 数组的细节,请查看 Ruby 数组(Array)。
哈希类型
Ruby 哈希是在大括号内放置一系列键/值对,键和值之间使用逗号和序列 => 分隔。尾部的逗号会被忽略。
实例
#!/usr/bin/ruby
hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f }
hsh.each do |key, value|
print key, " is ", value, "\n"
end
运行实例 »
这将产生以下结果:
green is 240
red is 3840
blue is 15
如需了解更多有关 Ruby 哈希的细节,请查看 Ruby 哈希(Hash)。
范围类型
一个范围表示一个区间。 范围是通过设置一个开始值和一个结束值来表示。范围可使用 s..e 和 s…e 来构造,或者通过 Range.new 来构造。
使用 .. 构造的范围从开始值运行到结束值(包含结束值)。使用 … 构造的范围从开始值运行到结束值(不包含结束值)。当作为一个迭代器使用时,范围会返回序列中的每个值。
范围 (1..5) 意味着它包含值 1, 2, 3, 4, 5,范围 (1…5) 意味着它包含值 1, 2, 3, 4 。
实例
#!/usr/bin/ruby
(10..15).each do |n|
print n, ' '
end
这将产生以下结果:
10 11 12 13 14 15
让我们编写一个简单的 Ruby 程序。所有的 Ruby 文件扩展名都是 .rb。所以,把下面的源代码放在 test.rb 文件中。 实例
#!/usr/bin/ruby -w
puts "Hello, Ruby!";
在这里,假设您的 /usr/bin 目录下已经有可用的 Ruby 解释器。现在,尝试运行这个程序,如下所示:
$ ruby test.rb
这将会产生下面的结果:
Hello, Ruby!
您已经看到了一个简单的 Ruby 程序,现在让我们看看一些 Ruby 语法相关的基本概念:
在 Ruby 代码中的空白字符,如空格和制表符一般会被忽略,除非当它们出现在字符串中时才不会被忽略。然而,有时候它们用于解释模棱两可的语句。当启用 -w 选项时,这种解释会产生警告。
实例:
a + b 被解释为 a+b (这是一个局部变量)
a +b 被解释为 a(+b) (这是一个方法调用)
Ruby 把分号和换行符解释为语句的结尾。但是,如果 Ruby 在行尾遇到运算符,比如 +、- 或反斜杠,它们表示一个语句的延续。
标识符是变量、常量和方法的名称。Ruby 标识符是大小写敏感的。这意味着 Ram 和 RAM 在 Ruby 中是两个不同的标识符。
Ruby 标识符的名称可以包含字母、数字和下划线字符( _ )。
下表列出了 Ruby 中的保留字。这些保留字不能作为常量或变量的名称。但是,它们可以作为方法名。
BEGIN do next then
END else nil true
alias elsif not undef
and end or unless
begin ensure redo until
break false rescue when
case for retry while
class if return while
def in self __FILE__
defined? module super __LINE__
“Here Document” 是指建立多行字符串。在 « 之后,您可以指定一个字符串或标识符来终止字符串,且当前行之后直到终止符为止的所有行是字符串的值。
如果终止符用引号括起,引号的类型决定了面向行的字符串类型。请注意« 和终止符之间必须没有空格。
下面是不同的实例:
#!/usr/bin/ruby -w
# -*- coding : utf-8 -*-
print <<EOF
这是第一种方式创建here document 。
多行字符串。
EOF
print <<"EOF"; # 与上面相同
这是第二种方式创建here document 。
多行字符串。
EOF
print <<`EOC` # 执行命令
echo hi there
echo lo there
EOC
print <<"foo", <<"bar" # 您可以把它们进行堆叠
I said foo.
foo
I said bar.
bar
这将产生以下结果:
This is the first way of creating
her document ie. multiple line string.
This is the second way of creating
her document ie. multiple line string.
hi there
lo there
I said foo.
I said bar.
语法
BEGIN {
code
}
声明 code 会在程序运行之前被调用。
实例
#!/usr/bin/ruby
puts "This is main Ruby Program"
BEGIN {
puts "Initializing Ruby Program"
}
这将产生以下结果:
Initializing Ruby Program
This is main Ruby Program
语法
END {
code
}
声明 code 会在程序的结尾被调用。
实例
#!/usr/bin/ruby
puts "This is main Ruby Program"
END {
puts "Terminating Ruby Program"
}
BEGIN {
puts "Initializing Ruby Program"
}
这将产生以下结果:
Initializing Ruby Program
This is main Ruby Program
Terminating Ruby Program
注释会对 Ruby 解释器隐藏一行,或者一行的一部分,或者若干行。您可以在行首使用字符( # ):
# 我是注释,请忽略我。
或者,注释可以跟着语句或表达式的同一行的后面:
name = "Madisetti" # 这也是注释
您可以注释多行,如下所示:
# 这是注释。
# 这也是注释。
# 这也是注释。
# 这还是注释。
下面是另一种形式。这种块注释会对解释器隐藏 =begin/=end 之间的行:
=begin
这是注释。
这也是注释。
这也是注释。
这还是注释。
=end
一直想再多接触一些脚本语言,之前写了一段时间 python 和 lua,感觉都非常不错。之所以要再学习 Ruby, 主要是看到 Ruby 的一些语法上的灵活性。
Ruby 支持代码块、修饰符等这些在其他语言里似乎都没有,最简单的示例:
#!/usr/bin/ruby
$debug=1
puts "debug\n" if $debug
新建了一个 Ruby 的笔记仓库,用来记录 Ruby 学习资料。
https://github.com/wsdjeg/ruby-tutorial-cn
经常使用 markdown 进行中文写作,包括但不限于写一些文档。对于中文排版目前没有非常好的检查工具。 因此做了 chinese_linter.vim 这个插件,目的在于提示中文文档中一些常见的排版错误。
在编辑中文文档时,使用如下命令即可检查,错误信息将被展示在 Vim 的 location list 窗口
:CheckChinese
目前支持如下错误代码:
错误代码 | 描述 |
---|---|
E001 | 中文字符后存在英文标点 |
E002 | 中英文之间没有空格 |
E003 | 中文与数字之间没有空格 |
E004 | 中文标点之后存在空格 |
E005 | 行尾含有空格 |
该插件才开始做,目前仅仅实现了以上五种规范检查,后面会添加更多的规范检查,欢迎尝试。
目前这个项目发布在 github 上面,如果有熟悉 Vim 脚本的同学,也欢迎参与,感谢!
接触过好几种编辑器、IDE,最终感觉还是 Vim 最适合。 学会了 Vim 之后,几乎没有任何动力去换其他编辑器( Neovim 除外)。 相信有很多 Vim 用户和我一样,对 Vim 存在这种感觉。
极简的思想
其实,Vim 代表的是一种 KISS 的 Geek 思想,而不仅仅是炫耀。这种思想是指:“选择你需要的,舍弃那些你不需要的”, 一种极简思想。一个臃肿的工具,也许可以提供 100% 的功能,但是,实际上你只需要 10% 的功能,其余 90% 功能, 你可能都没有心思去研究。那为什么不丢弃臃肿的 90%,轻装上阵呢?
当然,适当的展示,活跃社区气氛,吸引新人入坑 Vim 是我辈使命。
Vim 模式
Vim 不同于其他编辑器的地方,就是她提供的模式化编辑,和文本对象。任何 IDE 或者编辑器模拟的 Vim 插件, 无非是实现了这两个功能。通过模式,Vim 赋予了同一个按键多种功能,大大提高了按键的功效,可以让我们双手 集中在键盘中央区域,提高效率。另外,Vim 将一切文本看成对象,比如删除一个单词,diw( delete in word ) 等等这一类用法,我可以理解为 Vim 语。
记得以前看过一段文字,大致内容是这样的:
你只有折腾 Vim 累死过 3 次,你才能真正的喜欢上它,不然你就会选择放弃,最终回到 IDE。 在 Vim 的世界里,一切都需要自己动手,所以,他不适合不喜欢折腾的人,如果你对它没有 200% 的好奇心,不要玩, 不然你一定会摔键盘.
为什么说 Vim 写代码快? 前提你累死过 3 次,成功配置了 Vim。
那么开始神奇的 Vim 之旅。你就发现:
于是你开始对自己以前的一些行为出现质疑:
所以,同为喜欢 Vim 的你,让我们一起来说 Vim 语吧!
原文链接:https://blog.csdn.net/wsdjeg/article/details/79138641
iedit 模式是 SpaceVim 中最新实现的一个多光标编辑模式,取名 iedit 借鉴了 emacs 的 iedit-mode,这一模式给 vim 增添了多光标编辑功能。
效果图如下:
在 SpaceVim 中有三种方式启动 iedit 模式:
模式转变:
Key Binding | From | to |
---|---|---|
SPC s e |
normal or visual | iedit-Normal |
iedit-Normal 模式快捷键:
iedit-Normal 模式模仿 vim Normal 模式,以下的这些快捷键仅限于 iedit-Normal 模式.
Key Binding | Description |
---|---|
Esc | go back to Normal mode |
i | switch to iedit-Insert mode, same as i |
a | switch to iedit-Insert mode, same as a |
I | go to the beginning of the current occurrence and switch to iedit-Insert mode |
A | go to the end of the current occurrence and switch to iedit-Insert mode |
Move cursor to left | |
Move cursor to right | |
0 | go to the beginning of the current occurrence |
$ | go to the end of the current occurrence |
D | delete the occurrences |
S | delete the occurrences and switch to iedit-Insert mode |
gg | go to first occurrence |
G | go to last occurrence |
n | go to next occurrence |
N | go to previous occurrence |
iedit-Insert 模式快捷键:
iedit-Insert 模式借鉴与 vim Insert 模式下的快捷键,也借鉴了 emacs 和 bash 命令行下的快捷键:
Key Binding | Description |
---|---|
Esc | go back to iedit-Normal mode |
Move cursor to left | |
Move cursor to right | |
delete words before cursor | |
delete words after cursor |