Ruby语法基础(一)

Ruby是一种开源的面向对象程序设计的服务器端脚本语言,最初由松本行弘(Matz)设计开发,追求『快乐和生产力』,程序员友好型,被称为『human-oriented language』

hello world

首先打开vim

$ vim hello.rb

编写helloworld代码

puts "hello world!"

保存后运行

$ ruby hello.rb
hello world! # 运行结果

ruby也可以在命令行中键入irb,打开命令行交互模式,类似中Python的shell

Here Document

puts <<EOF
这是一种here document
是一种多行字符串
可以用来写大段文档
EOF

Begin&END

puts '这是主Ruby脚本'

# end语句会在程序的结尾被调用
END{
puts '停止Ruby程序'
} # begin语句会在程序的开始被调用
BEGIN{
puts '初始化Ruby程序'
}

注释

=begin
单行注释用#
多行注释用=begin .... =end
=end
puts '测试注释'

基本数据类型

数值类型Number

a = 123_123 # 十进制可以加下划线
b = 0x377 # 十六进制表示
c =0b1011 # 二进制表示
d = 6.32E-32 # 科学记数法表示
puts a, b, c, d

字符串类型(String)

  • 单引号中的内容不会被转义
  • 双引号中的内容会被转义,#{}内的脚本会被执行
name = 'world'
puts 'hello\tname'
puts "hello\t#{name.upcase}"
puts "24*20*35=#{24*20+35}" # 计算并转成字符串 运行结果:
hello\tname
hello WORLD
24*20*35=515

#{ expr }可以执行expr脚本并转换成字符串

数组(Array)

类似于Python中的list,支持[]索引,插入,删除,替换,集合间运算

a = ['fred',
10,
3.14,
'String',
'last'
]
a.each do |i|
print i,"!\n"
end

哈希(Hash or Dictionary)

hsh = {
:red=>0xf00, # 字符串作为key的情况下,用symbol比较好
:green => 0x0f0,
:blue => 0x00f
}
hsh.each do |key, value|
print key, ' is ', value, "\n"
end

范围(Range)

(10..15).each do
|i|
print i, ' '
end

类和对象

# 定义类
class Customer
# 类变量
@@nu_of_customer = 0
def initialize(id, name, addr)
# 属于实例本身的实例变量
@cust_id = id
@cust_name = name
@cust_addr = addr
@@nu_of_customer += 1
end
# 显示细节的函数
def show
puts "Customer id #{@cust_id}"
puts "Customer name #{@cust_name}"
puts "Customer addr #{@cust_addr}"
end
def show_total
puts "Total number of customers: #@@nu_of_customer"
end
end # 创建对象
cust1 = Customer.new('1','John','Wisdom Apartments, Ludhiya')
cust2 = Customer.new('2','Poul','New Empire road, Khandala') # 调用方法
cust1.show
cust2.show
cust1.show_total 运行结果
Customer id 1
Customer name John
Customer addr Wisdom Apartments, Ludhiya
Customer id 2
Customer name Poul
Customer addr New Empire road, Khandala
Total number of customers: 2

变量

全局变量

以$开头,不建议使用

def f1
$global_variable += 1
puts "f1: $global_variable = #{$global_variable}"
end # 全局变量用$开头
$global_variable = 0 puts "main: $global_variable = #{$global_variable}"
f1
puts "main: $global_variable = #{$global_variable}" 运算结果
main: $global_variable = 0
f1: $global_variable = 1
main: $global_variable = 1

实例变量

以@开头,属于实例本身,另外ruby体现数据与操作结合,外部不可以直接修改实例变量本身,博主认为这个面向对象很彻底

class Sample
def initialize
@x = 0 # 初始化后使用
end
def get_x
@x
end
def set_x(x)
@x = x
end
end s = Sample.new
s.set_x 2 # 命令行的传参风格
puts s.get_x

类变量

类变量以@@开头,必须初始化后使用。类变量在定义它的类或模块的子类的子类或子模块中可以共享,例子上面讲类和对象时已经指出

局部变量

局部变量以小写字母或者_开头,生命周期从class、module、def或do到相应的end,或者两个括号之间。一旦出作用域就直接释放

def sample_func
x = 1
puts x
end
sample_func
# puts x 报错undefined local variable or method `x' for main:Object (NameError)

常量

  • 常量用大写字母开头
  • 定义在类或模块内的常数可以从类或模块的内部访问,定义在类或模块外的常量可以被全局访问
  • 常量不能定义在方法内部
class Example
VAR1 = 100
VAR2 = 200
def show
puts "VAR1=#{VAR1}"
puts "VAR1=#{VAR2}"
end
end
obj = Example.new
obj.show 运行结果
VAR1=100
VAR1=200

伪变量

类似于pyhton或PHP中的魔法常量,只能读不能写

  • self: 当前方法的接收器对象。
  • true:代表 true 的值。
  • false: 代表 false 的值。
  • nil: 代表 undefined 的值。
  • __FILE__: 当前源文件的名称。
  • __LINE__: 当前行在源文件中的编号

小结

本文也就对于ruby有了快速的感性认识,进一步的学习还要继续学习

参考教程菜鸟教程

Ruby语法基础(一)的更多相关文章

  1. Ruby语法基础(三)

    Ruby语法基础(三) ​ 在前面快速入之后,这次加深对基本概念的理解. 字符串 ​ Ruby字符串可以分为单引号字符串和双引号字符串,单引号字符串效率更高,但双引号的支持转义和运行 puts '单引 ...

  2. Ruby语法基础(二)

    Ruby语法基础(二) 继续ruby的学习,这次主要把目光放到运算符,条件判断,循环,方法,以及其他ruby特有的基本概念上 运算符 算术运算符:+,-,/,%,**,值的注意的是,ruby中一切皆为 ...

  3. 3.ruby语法基础,全部变量,实例变量,类变量,局部变量的使用和注意的要点

    1.ruby的全局变量的概念和Java的全局变量的概念不同, ruby的全局变量是以$符号开头的,如果给全局变量的初始化值为nil会出现警告. 赋值给全局变量,这是ruby不推荐的,这样会使程序变得很 ...

  4. ruby之基础语法

    ruby语法之哈希 =>相当于python的字典 ruby语法之数组 =>相当于python的列表 举例: gitaly= Hash.new #建立新Hash类型 gitaly['firs ...

  5. JAVA 入门第一章(语法基础)

    本人初学java 博客分享记录一下自己的学习历程 java我的初步学习分为六章,有c和c++的基础学起来也简便了很多. 第一章 语法基础 第二章 面向对象 第三章 常用工具类 第四章 文件操纵 第五章 ...

  6. python基础入门一(语法基础)

    作为自己正式接触并应用的第一门编程语言,在Alex和武sir两位大王的要求下,开始了写博客总结的日子.学习编程语言是很有趣的一件事情,但有2点请一定要谨记:1.做人靠自己,码代码也必须靠自己.能不能成 ...

  7. PHP语法基础

    1.PHP语法基础 PHP标记符 <?php ?> 常亮与变量 $a = 10; 变量 可以在运行过程中修改 $a = 10; $a = 20; $b = 5; echo $a+$b; c ...

  8. Verilog语法基础讲解之参数化设计

    Verilog语法基础讲解之参数化设计   在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...

  9. C#语法基础和面向对象编程

    1.C#语法基础 http://www.cnblogs.com/tonney/archive/2011/03/16/1986456.html 2.C#与面向对象基础 很棒的资源,简明扼要,介绍的非常清 ...

随机推荐

  1. JQuery调用WCF服务

    一:创建一个wcf服务项目 [ServiceContract] public interface IService1 { [OperationContract] [WebInvoke(RequestF ...

  2. Ubuntu下VS Code 字体设置 + 标签匹配、括号匹配插件

    Ubuntu下比较好看的字体有: Courier NewSource Code ProWenQuanYi Micro HeiWenQuanYi Micro Hei MonoUbuntuDroid Sa ...

  3. YOLO V2 代码分析

    先介绍YOLO[转]: 第一个颠覆ross的RCNN系列,提出region-free,把检测任务直接转换为回归来做,第一次做到精度可以,且实时性很好. 1. 直接将原图划分为SxS个grid cell ...

  4. Storm——Android SQLite数据库管理类库

    Storm是一个Android SQLite数据库管理类库,可以通过注解创建表和迁移数据库.它不是ORM框架.   特性: 1.通过@Annotations创建表: 2.通过@Annotations迁 ...

  5. BZOJ1010 [HNOI2008]玩具装箱toy 动态规划 斜率优化

    原文链接http://www.cnblogs.com/zhouzhendong/p/8687797.html 题目传送门 - BZOJ1010 题意 一个数列$C$,然后把这个数列划分成若干段. 对于 ...

  6. HDU2853 Assignment KM

    原文链接http://www.cnblogs.com/zhouzhendong/p/8284105.html 题目传送门 - HDU2853 题意概括 (来自谷歌翻译) 题解 这是一道好题. 我们首先 ...

  7. gradle修改apk包名和apk文件名

    需求1:根据渠道不同给包名添加不同的后缀名 方案: //先定义默认包名,用来复用 def packageName = "xxx.xxxx.xxxx" defaultConfig { ...

  8. Person Re-ID行人重试别数据集

    1. 杜克大学数据(DukeMTMC-reID) DukeMTMC 数据集是一个大规模标记的多目标多摄像机行人跟踪数据集.它提供了一个由 8 个同步摄像机记录的新型大型高清视频数据集,具有 7,000 ...

  9. CUDA版Grabcut的实现

    在上次用 CUDA实现导向滤波 后,想着导向滤波能以很小的mask还原高分辨率下的边缘,能不能搞点事情出来,当时正好在研究Darknet框架,然后又看到grabcut算法,用opencv试了下,感觉效 ...

  10. 踩坑记:Tensorflow环境搭建

    自从上一篇论文投出去,之后就各种事就来了……处理那些乱七八糟的事就是让人心累,在加上师哥们毕业,能帮我的人越来越少了,而要指望你的人呢,越来越多.一想到那些用搜索引擎都搜不到资料的人,蓦地想起邓爷爷说 ...