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

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

Expression

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

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

Unless

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

 x = 10
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块来实现循环,可以有下面两种形式:

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

Loop

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

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

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

Loop

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

字符串表达式:

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

StringExpression

使用字符串插值:

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

Interpolation

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

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

Sub

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

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

regSub

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

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

Scan

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

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

Find

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

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

Match

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

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

Match

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

 irb(main):013:0> a = [1, 2,3]
=> [1, 2, 3]
irb(main):014:0> a.join
=> ""
irb(main):015:0> a.join('|')
=> "1|2|3"

join

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

  1. JavaScript学习day2 (基本语法上)

    知识点 JavaScript 的变量 数据类型 运算符 JavaScript 的动态类型 变量:(变量的命名规则和其他语言类似) 由数字,字母,下划线组成,区分大小写 以字母开头 变量名不能有空格 不 ...

  2. vue模板语法上

    vue的插值案例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  3. vue模板语法上集

    模板语法上集 1.1 插值 1.1.1 文本 {{msg}} 1.1.2 html 使用v-html指令用于输出html代码 1.1.3 属性 HTML属性中的值应使用v-bind指令 1.1.4 表 ...

  4. Day09 -超级经典面试题:Ruby的a ||= b(or-equals)是什么意思呢?

    前情提要: 写了这一系列下来,发现Ruby有许多特别的方法.前几天提到String字串,并且接续着在第八天我们了解串接(concatenate)与插入interpolation#{}方法(就连加号+也 ...

  5. Perl、PHP、Python、Java 和 Ruby 比较【转载+整理】

    从本文的内容上,写的时间比较早,而且有些术语我认为也不太准,有点口语化,但是意思到了. 问题: Perl.Python.Ruby 和 PHP 各自有何特点? 为什么动态语言多作为轻量级的解决方案? L ...

  6. 掌握R语言中的apply函数族(转)

    转自:http://blog.fens.me/r-apply/ 前言 刚开始接触R语言时,会听到各种的R语言使用技巧,其中最重要的一条就是不要用循环,效率特别低,要用向量计算代替循环计算. 那么,这是 ...

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

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型, 指针所指向的 类型, 指针的值或者叫指针所指向的内存区, 还有指针本身所占 ...

  8. Blazor和Vue对比学习(基础1.2):模板语法和Razor语法

    Vue使用模板语法,Blazor使用祖传的Razor语法,从逻辑和方向上看,两者极为相似,比如: 都基于HTML 都通过声明式地将组件实例的状态(数据/方法)绑定到呈现的DOM上 都通过指令实现更加丰 ...

  9. sass、less和stylus的安装使用和入门实践

    刚 开始的时候,说实话,我很反感使用css预处理器这种新玩意的,因为其中涉及到了编程的东西,私以为很复杂,而且考虑到项目不是一天能够完成的,也很少是 一个人完成的,对于这种团队的项目开发,前端实践用c ...

随机推荐

  1. sweetalert 快速显示两个提示, 第二个显示不出的问题

    今天在使用 sweetalert 做提示框的时候, 有个操作快速做了两次提示, 发现第二次显示不出: sweetAlert({}, function() { $.get('', function() ...

  2. Kafka与.net core(二)zookeeper

    1.zookeeper简单介绍 1.1作用 zookeeper的作用是存储kafka的服务器信息,topic信息,和cunsumer信息.如下图: 而zookeeper是个什么东西呢?简单来说就是一个 ...

  3. Nova 通过Python API 查询,创建,删除flavor

    [root@controller ~]# cat flavor.py from novaclient import client as nvclient from novaclient import ...

  4. Web Api 端点设计 与 Oauth

    最近一直看这方面的东西,总结如下: 在后续会进行实例demo演示,本篇进行理论详解. 下篇相关博客: <Web Api 内部数据思考 和 利用http缓存优化 Api> <API接口 ...

  5. FusionCharts的使用方法 - 公司所用的flash式的图像统计工具

    我们公司一直用这个图表统计, 最近整理了一下相关文档,提供大家学习. 首先可以看看 http://www.cnblogs.com/xuhongfei/archive/2013/04/12/301688 ...

  6. java学习笔记—使用HttpSession实现QQ的访问记录(31)

    1. 编写QQ空间数据类(QQS.java) public class QQS { private static LinkedHashMap<Integer, String> qqs = ...

  7. MySQL数据库密码破解

    研究MySQL数据库的加解密方式,在网络攻防过程中具有重要的意义:试想一旦获取了网站一定的权限后,如果能够获取MySQL中保存用户数据,通过解密后,即可通过正常途径来访问数据库:一方面可以直接操作数据 ...

  8. [Objective-C语言教程]内存管理(36)

    内存管理是任何编程语言中最重要的过程之一.它是在需要时分配对象的内存并在不再需要时取消分配的过程. 管理对象内存是一个性能问题; 如果应用程序不释放不需要的对象,则应用程序会因内存占用增加并且性能受损 ...

  9. [Objective-C语言教程]多态(26)

    多态性这个词表示有许多形式. 通常,当存在类的层次结构并且通过继承相关时,会发生多态性. Objective-C多态表示对成员函数的调用将导致执行不同的函数,具体取决于调用该函数的对象的类型. 考虑下 ...

  10. [Objective-C语言教程]继承(25)

    面向对象编程中最重要的概念之一是继承.继承允许根据一个类定义另一个类,这样可以更容易地创建和维护一个应用程序. 这也提供了重用代码功能和快速实现时间的机会. 在创建类时,程序员可以指定新类应该继承现有 ...