Ruby(2): 基本语法上

表达式和变量:
这两点和其他主流的编程语言基本没有差别,这里直接跳过。 需要注意的是 ruby中 x=x+1 可以写成 x+=1 但是不支持 x++ , x-- 等一元运算符
 
比较运算符和表达式:
在ruby中可以直接在表达式中混合使用比较运算符,来实现如果满足某个逻辑则进行相应的表达式操作:

1 x = 10
2 puts "x is ten" if x == 10   # x is ten

Expression

除了if关键字还可以使用unless,这个表示和if相反的:

1 x = 24
2 puts "You are not a teenager" unless age > 12 && age < 20  # You are not a teenager

Unless

表示某个数在两个数之间可以使用between,此时between的两个边界都包括:

1 x = 10
2 puts "x is in the area" if x.between?(6, 10)   # x is in the area

Between

  需要注意的特殊比较符号: x<=>y,该表达式如果 x==y,则返回0;如果 x > y,则返回1; 如果x<y,则返回-1 .
 
循环:
前面看到可以使用数字的times块来实现循环,可以有下面两种形式:

1 # 使用do end来包裹逻辑代码块
2 5.times do puts "test" end     # testtesttesttesttest
3
4 # 使用{ }来包裹逻辑代码快
5 5.times {puts "test"}               # testtesttesttesttest

Loop

一般来说如果循环的逻辑代码是单行且较短的时候可以使用大括号的形式,而当多行的时候建议使用do end形式。

另外对于循环的时候需要知道当前循环数的时候,可以使用下面三种形式的迭代子:

1 1.upto(10) {|number| puts number}
2 # 或者
3 do |number| puts number end
4
5 #下面同样可以两种方式
6 10.downto(5) {|number| puts number}
7 0.step(50, 5) {|number| puts number} 

Loop

常量:
在Ruby中一般将常量命名成首字母大写的形式,一旦变量名首字母大写之后,虽然可以继续改变其值,但是ruby会给出相应的警告。其实类名也是首字母大写,某种程度上,类也可以看做是常量

字符串表达式:

1 puts "abc" * 5  # abcabcabcabcabc
2 puts ‘x‘ > ‘y‘      # false
3 puts ‘x‘ < ‘y‘      # true
4 # 如果想得到一个字符ASCII码的值,使用 ? :
5 puts ?A --> 65      #  (在ruby2.3.0中好像还是会输出字符)
6 如果想要知道某个ASCII码对应的字符,可以使用数字 .chr方法来将其转换为字符:
7 puts 65.chr --> A 

StringExpression

使用字符串插值:

 1 puts "This is a #{‘bad ‘ *3} word" # This is a bad bad bad word
 2 # 需要注意的是这一句整个必须用双引号括起来,而里面的bad则可以用单引号,双引号都可
 3
 4 # 另外可以再插值中使用变量:
 5 x = 10
 6 y = 20
 7 # 如果想要输出 10 + 20 = 30
 8 # 直接输出的话,必须调用数字的 .to_s 方法,否则会报错:
 9 puts x.to_s + " + " + y.to_s + " = " + (x + y).to_s
10 # 而使用插值的话,输入为:
11 puts "#{x} + #{y} = #{x + y}" 

Interpolation

正则表达式与字符串操作:
替换:
最简单的字符串替换为:

1 "foobarbar".sub("bar", "foo")  #  foofoobar 

Sub

该方法只替换第一次遇到的,要替换所有使用 gsub.
当然sub、gsub方法都支持正则表达式,例如要替换字符串中的前两个字符为 hello,可以使用

1 x = "foobarbar"
2 puts x.sub(/^../, "hello")  # helloobarbar

regSub

用正则表达式进行迭代:
在字符串中进行迭代处理,scan函数是最好的:

1 x.scan(/./) do |letter| puts letter end 

Scan

其中scan的传入参数也是一个正则表达式,该函数会遍历字符串,找到匹配的字符并进行相应的处理 。
其中常见的正则表达式特殊符号有: \w(word) \d(digit) \s(space) ^(表开始) $(表结束) .(任意字符) \A(字符开始的锚) \Z(字符结束的锚)  (其中w/d/s的大写形式表示其小写形式取反)

1 # 例如找到下面字符串中的数字:
2 "the car cost $1000 and that car cost $100".scan(/\d/) do |letter| puts letter end
3 # 会发现这时候是一个一个数字输出,这时就要用到 + 号表示一个或者多个了。
4 "the car cost $1000 and that car cost $100".scan(/\d+/) do |letter| puts letter end 

Find

匹配查询:
如果只是想看下字符串是否有匹配的模式,可以使用如下面的方式:

1  # the string has no digits
2 puts "the string has no digits" unless "hello, this is a test" =~ /[0-9]/  

Match

当然可以使用更强大的字符串match函数,该函数不需要用 // 指定正则表达式,会默认的把中间的字符串作为正则表达式,且有一个返回值,类似于java上的group。可以通过列表似的方式来访问:

1 puts "the string has no digits" unless "hello, this is a test".match(‘[0-9]‘)
2 x = "this is a test".match(/(\w+) (\w+)/)
3 x[0]    # this is
4 x[1]    # this
5 x[2]    #  is
6 x[3]    # nil 

Match

数组:
初始化的时候不需要指定长度, 可以直接 a = []. Redis的数组越界访问元素不会报错,只是会返回 nil。
往数组加值: a << "word" 或者 a.push(123)  --- 这两种方法都是将元素放到数组末尾
将值弹出来 : a.pop (这时候弹出的是最后的元素)
数组是个先进先出的容器,但是这个pop明显是后进先出。得到数组长度使用的是 .length属性。(实际上Redis中数组或者字符串的长度获取length和size方法都可以)
可以使用join方法将数组中的元素组合成一个长的字符串,join方法可以不带参数当做属性用,也可以带一个参数表示组合成新的字符串之后用什么字符进行分割。

1 irb(main):013:0> a = [1, 2,3]
2 => [1, 2, 3]
3 irb(main):014:0> a.join
4 => "123"
5 irb(main):015:0> a.join(‘|‘)
6 => "1|2|3"

join

时间: 2024-10-11 12:58:26

Ruby(2): 基本语法上的相关文章

vue模板语法上

vue的插值案例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>vue的插值案例</title> <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script> </head> <body> <div

vue模板语法上集

模板语法上集 1.1 插值 1.1.1 文本 {{msg}} 1.1.2 html 使用v-html指令用于输出html代码 1.1.3 属性 HTML属性中的值应使用v-bind指令 1.1.4 表达式 Vue提供了完全的JavaScript表达式支持 {{str.substr(0,6).toUpperCase()}} {{ number + 1 }} {{ ok ? 'YES' : 'NO' }} <li v-bind:id="'list-' + id">我的Id是js

《七周七语言:理解多种编程范型》のruby课后习题答案

本系列是<七周七语言>的课后习题答案.这本书不拘泥于语法细节,而是横向比较各种编程语言(非热门)之间的编程范式. 是本对编程觉悟能有所帮助的好书,这里就不多做介绍了,感兴趣的同学不妨去看一下. 不得不说,Ruby的风格很黑客. 1. 打印字符串"Hello, world." puts "Hello, world." 2. 在字符串“Hello, Ruby.”中,找出"Ruby."所在下标. puts "Hello, Ruby

swift语法和java的比较

1. 定义常量和变量 a. Swift语法 常量: let MaxNumber = 10 变量: var name = 1 b. Java语法 常量: public final int MaxNumber= 10; 变量: public String name = "morden"; 这里要注意的是swift有类型标注(type annotation)这个语法:如果要添加类型标注,需要在常量或者变量名后面加上一个冒号和空格,然后加上类型名称.但是因为swift编译器可以进行类型安全判定

大话C语言和C++

C和C++的关系:就像是win98跟winXP的关系.C++是在C的基础上增加了新的理论,玩出了新的花样.所以叫C加加. C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制). C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制. 所以C与C++的最大区别在于它们的用于解决问题的思想方

c语言中,指针加1的情况.指针变量详细介绍

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型, 指针所指向的 类型, 指针的值或者叫指针所指向的内存区, 还有指针本身所占据的内存区. 让我们分别说明. 先声明几个指针放着做例子:  例一:  (1)int *ptr;  (2)char *ptr;  (3)int **ptr;  (4)int(*ptr)[3];  (5)int*(*ptr)[4]; 指针的类型  从语法的角度看,你只要把指针声明语句里的指针名字去掉,

【转】如何评价 Apple 新推出的编程语言 Swift?

如何评价 Apple 新推出的编程语言 Swift? 原文地址:http://www.zhihu.com/question/24002984 评价:如果你会Objective-C,你不需要去看它. 如果问我这语言对普通开发者重要不重要,我说重要,可以明确告诉你这一点--它是Apple 在WWDC 向全世界推出的重磅语言我怎么能说它不重要?它降低了入门的门槛.使得大量的JS, Python, Ruby用户会使用Apple 的技术为其开发程序.它的作用,和Core Data, Interface B

sass、less、stylus的安装及使用

一.什么是CSS预处器 CSS预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为CSS增加了一些编程的特性,将CSS作为目标生成文件,然后开发者就 只要使用这种语言进行编码工作.通俗的说,CSS预处理器用一种专门的编程语言,进行web页面样式设计,然后再编译成正常的CSS文件,以供项目使用. CSS预处理器为CSS增加一些编程的特性,无需考虑浏览器的兼容性问题,例如你可以在CSS中使用变量.简单的逻辑程序.函数等等在编程语言中的一些基 本特性,可以让你的CSS更加简洁.适应性更强

Python学习的个人笔记(基础语法)

Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅,一开始保存在word上,代码不是很好看,于是决定复制到博客里面,可能有复制过程中出错的,或者我本身在理解方面有出错的地方,希望能得到指正,谢谢  后续的内容我会继续学习…… python下载地址  www.python.org Python 分为2.7和3.3两个版本,3.3有些库不兼容,因此用2.