1、方法

定义如下所示:

def string_message(str='')
if str.empty?
"It's an empty string!"
else
"The string is nonempty."
end
end

参数:' '是参数str的默认值,调用函数时,str参数是可选的,如果不指定,就使用默认值。参数名称任意。
返回值:Ruby方法不显示指定返回值,方法的返回值是最后一个语句的计算结果,也可以显式指定返回值。

下面方法和上面的方法等价:

def string_message(str='')
return "It's an empty string!" if str.empty?
return "The string is nonempty."
end

2、unless的用法

#!/usr/bin/ruby
x=1
unless x>2
puts "x is less than 2"
else
puts "x is greater than 2"
end

用!!对对象做两次取反操作,把对象转换成布尔值。Ruby中nil是唯一一个布尔值为“假”的对象,其他所有Ruby对象都是“真”值,数字0也是。

>> nil
=> false >> !0
=> true
>> "foobar".length
>> "foobar".empty?
>> "foobar".include?("foo")
>> puts "Both strings are empty" if x.empty? && y.empty?
>> nil.to_s
=> ""
>> nil.to_s.empty?
=> true

3、数组(array)

(1)split方法的使用

>> "foo bar baz".split #把字符串拆分成幼三个元素的数组,默认在空格处进行拆分
=> ["foo","bar","baz"] >> "fooxbarxbazx".split('x')
=> ["foo","bar","baz"]

(2)索引

索引可以是负数

>> a=[3,4,2]
>> a[0]
=> 3
>> a[-1]
=> 2

a.first a.second a.last a.length a.empty? a.include?(42)
a.sort a.reverse a.shuffle 这几个方法都不能修改a的值,如果想修改数组的值,要使用相应的bang(!)方法,如下所示:
a.sort! a.reverse! a.shuffle!
a.push 向数组中添加元素,等价于<<操作符 例如:a<<"foo"<<"bar"
Ruby数组中科院包含不同类型的数据,例如整数和字符串
a.join 将字符串串联起来,相当于split的相反操作 a.join(',')

4、值域(range)

>> (0..5).to_a
=> [0,1,2,3,4]
>> a=%w[foo bar baz quux]
=> ["foo","bar","baz","quux"]
>> a[0..2]
=> ["foo","bar","baz"]
>> a=(0..9).to_a
=> [0,1,2,3,4,5,6,7,8,9]
>> a[2..(a.length-1)]
=> [2,3,4,5,6,7,8,9]
>> a[2,-1]
=> [2,3,4,5,6,7,8,9]
>> ('a'..'e').to_a
=> ["a","b","c","d","e"]

5、块

约定:当块中只有一行简单的代码时使用花括号形式;当块是一行很长的代码,或者有很多行时使用do..end形式。例如:

>> (1..5).each{|i| puts 2*i}
(1..5).each do |i|
puts 2*i
puts '-'
end
>> 3.times{puts "betelgeuse"}
>> (1..5).map{|i| i**2}
>> %w[a b c].map{|char| char.upcase}
>> %w[A B C].map{|char| char.downcase}
>> %w[A B C].map(&:downcase)
>> ('a'..'z').to_a.shuffle[0..7].join #生成随机二级域名

6、哈希和符号

哈希(hash)本质上就是数组,它的索引不局限于数字。哈希的索引可以使用任何对象。哈希通过一对花括号包含一些键值对的形式表示。哈希和数组最大的区别在于:哈希中的元素没有特定的顺序。哈希中没有定义的键对应的值是nil

>> user={}    #{}是一个空哈希
>> user["first_name"]="Amy"
>> user["last_name"]="Sun"
>> user["first_name"]
=> "Amy"
>> user
=> {"first_name"=>"Amy","last_name"=>"Sun"}
>> user["e-mail"]
=> nil >> user={ "first_name"=>"Amy","last_name"=>"Sun" }
=>{"first_name"=>"Amy","last_name"=>"Sun"}

符号:Ruby中特有的数据类型,是没有约束的字符串

>> user={ :name=>"AmySun",:email=>"12***22@**.com" }
=> {:name=>"AmySun",:email=>"12***22@**.com"}
>> user[:name]
=> "AmySun"
>> user[:password]
=> nil >> h1={ :name=>"AmySun",:email=>"12***22@**.com" }
=> {:name=>"AmySun",:email=>"12***22@**.com"}
>> h1={ name:"AmySun",email:"12***22@**.com" } #:name=>和name:的作用一样,因此{ :name=>"AmySun" }和{ name:"AmySun" }是等效的,但是只有:name表示符号
=> {:name=>"AmySun",:email=>"12***22@**.com"}
>> h1==h2
=> true

嵌套哈希

>> params={}
=> {}
>> params[:user]={ name:"AmySun",email:"12***22@**.com" }
=> {:name=>"AmySun",:email=>"12***22@**.com"}
>> params
=> {:user=>{:name=>"AmySun",:email=>"12***22@**.com"}}
>> params[:user][:email]
=> 12***22@**.com

哈希中的each方法

>> user={ success:"It worked!",danger:"It failed." }
=> {:success=>"It worked!",:danger=>"It failed."}
user.each do |key,value|
puts "Key #{key.inspect} has value #{value.inspect}"
end
# 结果
# Key :success has value "It worked!"
# Key :failed has value "It failed."

其中inspect方法返回被调用对象的字符串字面量表现形式,例如:

>> puts (1..5).to_a.inspect
[1,2,3,4,5]
>> puts :name,:name.inspect
name
:name
>> puts "It worked!","It worked!".inspect
It worked!
"It worked!"
>> p :name #等价于 ‘puts :name.inspect’
:name

7、引入css说明

<%= stylesheet_link_tag 'application',media:'all','data-trubolinks-track'=>true %>

说明:调用函数时,如果哈希是最后一个参数,可以省略花括号;因为data-trubolinks-track中有连字符,所以不能写成data-trubolinks-track:true的样式生成的html源码如下:

<link data-trubolinks-track="true" href="/assets/application.css" media="alll" rel="stylesheet" />

 

Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 其他数据类型(二)的更多相关文章

  1. Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 字符串

    1.辅助方法 2.字符串 输入“irb”进入Ruby命令行开发环境,控制器的启动方法是在命令行中执行“rails console”. (1)字符串连接 >>"foo"+ ...

  2. Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 类

    Ruby和其他面向对象的语言一样,使用类来组织方法,然后实例化类,创建对象.1.构造方法使用双引号是字符串的字面构造方法,也可以使用“具名构造方法”,即在类名上调用new方法 >> s=& ...

  3. Ruby on Rails Tutorial 第五章 完善布局

    本章目标:局部视图.Rails路由.Asset Pipeline.Sass1.Bootstrap是Twitter开发的开源Web设计框架mockup是网页构思图,在web领域经常称之为“线框图”,用于 ...

  4. Ruby on Rails Tutorial 第三章 静态页面

    1.生成静态页面 $ rails generate controller StaticPages home help    #生成主页和帮助页面的路由.控制器及静态页面 $ rails destroy ...

  5. Ruby on Rails Tutorial 第六章 用户模型

    1.用户模型(1)数据库迁移Rails默认使用关系数据库存储数据,数据库中的表有数据行组成,每一行都有相应的列,对应数据属性.把列名命名为相应的名字后,ActiveRecord会自动把他们识别为用户对 ...

  6. Ruby on Rails Tutorial 第一章 之 简介

    1.目标:掌握MVC和REST.生成器.迁移.路由.嵌入式Ruby 本书涉及Rails,Ruby语言,Rails默认使用的测试框架(MiniTest),Unix命令行,HTML,CSS,少量的Java ...

  7. Ruby on Rails Tutorial 第一章 之 搭建开发环境

    云端开发环境,Cloud9(https://ide.c9.io/).这个开发环境预先安装好了Rails开发所需要的大多数软件,包括Ruby.RubyGems和Git,需要自己安装Rails. 1.安装 ...

  8. Ruby on Rails Tutorial 第2版 学习笔记

    Ruby on Rails Tutorial 第2版 在线阅读:http://railstutorial-china.org/ 英文版:http://ruby.railstutorial.org/ru ...

  9. Ruby on Rails Tutorial读书笔记-1

    只是怕忘了命令,全部撸一次,记个大概.. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 安装Ruby之前,先要安装RVM: curl -L https://get.rvm.io | bas ...

随机推荐

  1. C++程序设计之结构体,共用体,枚举和typedef

    [1]结构体的基本功 注意结构体里面可以有很多东西,可以结构体里面包含结构体 #include<iostream> using namespace std; struct Date { i ...

  2. bzoj 1798 [Ahoi2009]Seq 维护序列seq(线段树+传标)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1798 [题意] 给定一个序列,要求提供区间乘/加,以及区间求和的操作 [思路] 线段树 ...

  3. 第二百九十四天 how can I 坚持

    这是怎么了,好难受,晚上都没吃饭,全身都疼.该咋办. 其实,真的是身体最重要. 洗洗睡了.好难受.

  4. 第二百八十六天 how can I 坚持

    bug不断啊,头疼. 今天早上到的倒是挺早. 中午吃的黄焖鸡,晚上加了会班. 勇江的鱼都死了,杨建的还剩3条,晚上到家都快十点了,还洗了衣服,没捞出来呢, 希望可以请下来假吧. 晾上衣服睡觉.

  5. 转】Maven学习总结(二)——Maven项目构建过程练习

    原博文出自于:http://www.cnblogs.com/xdp-gacl/p/4051690.html 感谢! 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验一下Maven ...

  6. 【转】Maven实战(六)--- dependencies与dependencyManagement的区别

    原博文出自于:http://blog.csdn.net/liutengteng130/article/details/46991829   感谢! 在上一个项目中遇到一些jar包冲突的问题,之后还有很 ...

  7. HDU 5510 Bazinga (2015沈阳现场赛,子串判断)

    Bazinga Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  8. jquery ajax请求后台 的简单例子

    jQuery.ajax(url,[settings]) 概述 通过 HTTP 请求加载远程数据. jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax ...

  9. ASP导出Word带页眉页脚,中文不乱码

    关键代码: <% Response.Clear() Response.CodePage= Response.Charset="UTF-8" Response.ContentT ...

  10. Hibernate的配置

    配置Hibernate 1.在项目中引入Hibernate的Jar包 在 WebContent/WEB-INF/lib 目录下 导入jar包 2.在Java Resources 下创建 hiberna ...