Ruby:基本语法研究,宝石一样的语言
前言
博客这种东西,一是为了当做笔记,二是为了当做草稿!
BEGIN和END
和构造函数、析构函数一样,给整个程序提供这样的功能!
puts "这是ruby主程序"#最后执行的END块
END{puts "停止ruby程序1"
}
#END块先执行末尾的,从下往上
END{puts "停止ruby程序2"
}#程序会首先执行BEGIN块,然后从头开始执行
BEGIN{puts "初始化ruby程序1"
}
#BEGIN块按顺序执行,从上往下
BEGIN{puts "初始化ruby程序2"
}
Number(Integer,Float)
数值类型(Number)
----------------------Integer
123 # Fixnum 十进制
1_234 # Fixnum 带有下划线的十进制
-500 # 负的 Fixnum
0377 # 八进制
0xff # 十六进制
0b1011 # 二进制
"a".ord # "a" 的字符编码
?\n # 换行符(0x0a)的编码
12345678901234567890 # 大数#整型 Integer 以下是一些整型字面量
#字面量(literal):代码中能见到的值,数值,bool值,字符串等都叫字面量
#如以下的0,1_000_000,0xa等
a1=0 #带千分符的整型
a2=1_000_000 #其它进制的表示
a3=0xa
puts a1,a2
puts a3 #puts print 都是向控制台打印字符,其中puts带回车换行符 ------------------------float
123.4 # 浮点值
1.0e6 # 科学记数法
4E20 # 不是必需的
4e+20 # 指数前的符号#浮点型
f1=0.0
f2=2.1
f3=1000000.1
puts f3
字符串
字符串类型(String)
Ruby 字符串简单地说是一个 8 位字节序列,它们是类 String 的对象。
双引号标记的字符串允许替换和使用反斜线符号,单引号标记的字符串不允许替换,且只允许使用 \\ 和 \' 两个反斜线符号。puts 'escape using "\\"';
puts 'That\'s right';
>
escape using "\"
That's right使用序列 #{ expr } 替换任意 Ruby 表达式的值为一个字符串。在这里,expr 可以是任意的 Ruby 表达式。puts "相乘 : #{24*60*60}";
>
相乘 : 86400name="Ruby"
puts name
puts "#{name+",ok"}"
>
Ruby
Ruby,ok
数组
数组(Array)
数组字面量通过[]中以逗号分隔定义,且支持range定义。(1)数组通过[]索引访问
(2)通过赋值操作插入、删除、替换元素
(3)通过+,-号进行合并和删除元素,且集合做为新集合出现
(4)通过<<号向原数据追加元素
(5)通过*号重复数组元素
(6)通过|和&符号做并集和交集操作(注意顺序)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
哈希
哈希(Hash)
hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f }
hsh.each do |key, value|print key, " is ", value, "\n"
end
>
red is 3840
green is 240
blue is 15
范围
范围(range)
范围可使用 s..e 和 s...e 来构造,或者通过 Range.new 来构造。
范围 (1..5) 意味着它包含值 1, 2, 3, 4 ,5
范围 (1...5) 意味着它包含值 1, 2, 3, 4 (10..15).each do |n|print n, ' '
end
>
10 11 12 13 14 15
变量
Ruby 类中的变量
Ruby 提供了四种类型的变量:局部变量:局部变量是在方法中定义的变量。局部变量在方法外是不可用的局部变量以小写字母或 _ 开始。实例变量:实例变量可以跨任何特定的实例或对象中的方法使用。实例变量可以从对象到对象的改变。实例变量在变量名之前放置符号(@)。类变量:类变量可以跨不同的对象使用。类变量属于类,且是类的一个属性。类变量在变量名之前放置符号(@@)。全局变量:类变量不能跨类使用。全局变量总是以美元符号($)开始。
类变量(@@a)
class Customer@@number=10 #类变量#必须是initialize,如果想new时带参数的话def initialize(id,name,addr)@c_id=id #实例变量@c_name=name@c_addr=addrprint @@numberend
endcustomer1 = Customer.new("001","夏洛克福尔摩斯","贝克街128号")
全局变量($a)
$a=13 #全局变量
class Persondef Print_aputs "全局变量a在Person中的输出为" +"#$a!"end
end
class Animaldef Print_aputs "全局变量a在Animal中的输出为" \"#$a!"end
end
b=Person.new
b.Print_a
b=Animal.new
b.Print_a
Operator
-----------------------
算术操作Op:+ - * / **(指数操作) %求模-----------------------
比较操作Op:== != > < >= <= <=>联合比较运算符。如果第一个操作数等于第二个操作数则返回 0,如果第一个操作数大于第二个操作数则返回 1,如果第一个操作数小于第二个操作数则返回 -1。===用于测试 case 语句的 when 子句内的相等。(1...5)===2 返回true.eql?相同的类型和相等的值,则返回 true1==1.0 返回true1.eql?(1.0) 返回falseequal?相同的对象 id,则返回 true。如果 aObj 是 bObj 的副本,那么 aObj == bObj 返回 trueaObj.equal?bObj 返回 falseaObj.equal?aObj 返回 true。-----------------------
赋值运算符Op:= += -= *= /= %= **=-----------------------
逗号并行赋值
a,b,c=1,2,3-----------------------
位运算付Op:& | ^ ~ >> << -----------------------
逻辑运算符Op:and or not && || !-----------------------
三运运算符Op:?-----------------------
范围运算符
(1..10) 1到10
(1...10) 1到9-----------------------
是否定义判断符
defined?param 看param定义没,或初始化没
if(满足条件进入block)
x=1
if x>2puts "x>2"
elsif x<=2 and x!=0puts "x=1orx<0"
else puts "undefined x"
end# if 修饰符-------------------
$deb=101
print "deb>2\n" if $deb>2
unless(不满足条件进入block)
unless $deb>10 # unless 和 if 相反puts "kkkkkkk"
elseputs "sssss"
endprint "sdaiojwjdfe3qwe" unless $deb==34
case-when (和switch一样)
a=1
case a
when a == 1 then a=2 end
puts aa = 1
case a
when 0..1puts "0..1"
when 2..3puts "2..3"
when 4..5puts "4..5"
elseputs "other"
end
#{i} (普通变量在字符串中的输出)
for i in -4..3.5puts "局部变量的值为 #{i}"
end
break(打破内部循环块)
#终止最内部的循环-------------break
for i in 0..5if i > 2 thenbreakendputs "局部变量的值为 #{i}"
end
next(马上进入下轮循环)
#跳到循环的下一个迭代-------------next
#就是continue
for i in 0..5if i < 2 thennextendputs "局部变量的值为 #{i}"
end
redo(该轮循环重新循环)
#重新开始最内部循环的该次迭代-----------redo
for i in 0..5if i < 2 thenputs "局部变量的值为 #{i}"redoend
end
raise(满足条件抛出异常)
(0..5).each do |i|beginputs iraise 'error today' if i==2rescue => exceptionputs 'error i=199'i=199retry#retry 之后,变量 i 恢复到 raise 时的值end
end
范围(字母步进)
#("f".."a").each do |i| error
("a".."f").each do |i|puts "value is #{i}"redo if i >"c"
end
文件写入
f=File.new('output.txt','a')
#f=File.open('output.txt','w')
f.puts "The Ruby tutorial"
f.close
#文件读取
File.open('learning.rb','r') do |handle|if handleputs handle.sysread(50)elseputs "unable to open file"end
end
文件写入
f=File.new("output.txt",'a')
f.syswrite("ABCDEFG") #字符串后面没有被添加换行
逐行读取
buf = IO.readlines("output.txt")
(0..10).each do |i|puts buf[i]
end
Ruby:基本语法研究,宝石一样的语言相关推荐
- 数据统计与分析基础实验一:基本语法与运算(R语言)
数据分析与统计基础实验一:基本语法与运算(R语言) 1.编写程序,记录十名学生的信息,至少包括姓名.年龄.出生年.数据统计分析课程实验成绩,程序输出前n个学生的年龄平均值.数据统计分析课程实验成绩平均 ...
- 【Groovy】Groovy 语言特点简介 ( 支持 Java 语法 | 支持 Java 虚拟机 | Groovy 语言是动态语言 | Groovy 扩展 JDK | 编译时元编程 )
文章目录 一.Groovy 支持 Java 语法 二.Groovy 支持 Java 虚拟机 三.Groovy 语言是 动态语言 四.Groovy 扩展 JDK 五.Groovy 编译时元编程 一.Gr ...
- Java基础语法 第2节 Java语言基本语法
一.标识符和关键字 1.标识符 1)java中标识符用来为程序的白能量.常量.方法.类.接口和包名命名,标识符由字母.数字.下划线.美元符号组成,且第一个字符不能是数字: 2)标志符命名规则:见名知意 ...
- 下列符合c语言语法的字符常量是,C语言程序设计(周经亚)选择题练习-chapter 5.doc...
选择题练习一 下叙述中正确的是 [1] . A)在C程序中,main函数必须位于程序的最前面 B)C程序的每行中只能写一条语句 C)C语言本身没有输入输出语句 D)在对一个C程序进行编译的过程中,可发 ...
- 【1】C++语法与数据结构之C语言学生管理系统转C++学生管理系统
从本文开始,后续将陆续发布C++语法与数据结构的相关内容,同样还是以学生管理系统来融汇贯通所有知识点. 接上篇博客[终极完美高效]C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点 ...
- ruby基本语法(2)
关于数组 Ruby数组中的数据类型可以不相同并且长度也是可变的.(好聪明啊感觉用的久了就会变笨了,除非你本来就是老手)比如下面的例子 Myarray=[1,2,"ruby"] Ru ...
- python语言的读法-就语法而言,Python 这个语言怎么样?
Python的特点是语法简洁,如果是有过其他编程语言经验的朋友,对其他语言的语法会比较熟悉,初次接触Python可能会不太适应,不过随着Python语言的使用会逐步体会到这一点. Python有两个外 ...
- python语言的语法_Python第一章基本语言语法
第一章:基本语法 1.1.1基本的输入输出函数 Print ( ) 作用:输出字符串 用法1: print('代输出字符串') 用法2:用于输出一个或多个变量 print(变量1,变量2,-) 用法3 ...
- 英语和汉语语法方面的区别(语言类型学)
对于我们以汉语为母语而学习英语的人来说,会感觉汉语好像没有什么语法.对于母语者而言,语法是一种高度内化的东西,你有的不是像语法书那样的成文的语法规则,而是两个字:直觉. 其实汉语也是有时态的,确切地说 ...
最新文章
- 用cmd运行python文件_怎么用cmd运行python文件
- Unity3D的坑系列:动态加载dll
- tcpdump 识别成dns_为什么总能看到广告弹窗?没错,就是DNS的问题
- 第 3 章 镜像 - 010 - base 镜像
- 二分图带权最大匹配费用流_一文掌握阻抗匹配
- 被高中生物骗了这么多年,原来人体内细胞的DNA是有不同的?
- loadrunner录制回放常见问题及解决办法
- python--条件判断和循环--3
- at shutdown 不起作用_at胎是什么胎
- 服务器 uefi 安装win7系统,uefi安装win7_efi引导gpt安装win7教程
- Matlab代码运行基础文章讲解
- 切线和倒数_原函数的导数和反函数的导数为什么是倒数关系
- SQL注入漏洞 详解
- 贪吃小怪物显示服务器人数爆满,贪吃小怪物进不去怎么办 贪吃小怪物为什么进不去...
- 华为私有云的搭建方案_Kali linux 搭建私有云
- 如果人类起源是一部编程史
- UCF Local Programming Contest 2016 计蒜客解(补)题报告
- scratch自制积木
- 仿QQ概念版的登陆界面
- android launcher开发(4) Home键与launcher
热门文章
- 【POJ 3321】Apple Tree(树的dfs序+树状数组)
- 各国家域名总量统计Top10:美国德国中国居前三
- H3C堆叠实验配置(精品系列避坑篇)
- acme.sh免费签发SSL证书
- 【集训DAY4】Forging【期望DP】
- Day10 面向对象 、类和对象的关系
- linux7磁盘文件类型,CentOS 7 查看磁盘文件系统格式
- rabbitmq publisher(生产者)注意的几个点
- GUI设计禁忌 之一 ——使用了错误的控件
- C++GUI之wxWidgets(2)-hello,world