ruby语法基础

1.方法

方法时对象定义的与该对象相关的操作。在Ruby中,对象的所有的操作都被封装成

方法。

语法糖:语法糖是一种为了照顾一般人的习惯而产生的特殊语法。
ruby中一切数据都是对象,那么加法运算应该写成3.add(2).但是一般人更
习惯于2+2.这便时一种语法糖。

方法的调用

对象.方法名(参数1,参数2,...)

带块的方法的调用

对象.方法名(参数,...) do |变量1,变量2,...|
块内容
end

eg:each方法

(0..10).each do  |i|
puts i #1 .... 10
if i==5 then
break
end
end

其中i被称作块块变量,不同的方法的块变量个数不同。

运算符方法

ruby中有些方法看起来像运算符

obj + arg1
obj[arg1]=arg2

其中的obj为调用方法的对象,arg1、arg2理解为参数

方法的分类

Ruby的方法可以分为三类:

  1. 实例方法
  2. 类方法
  3. 函数式方法

实例方法

方法的调用者是一个对象

eg:

p "ads".eql?"sdsa"

类方法

方法的调用者时类

eg:

File.open "hello.txt"

Ruby中调用类方法还可以使用“::”代替“.”。

函数式方法

没有调用对象的方法称为函数时方法,eg:

p "hello"
puts "aaa"

Ruby帮助文档中方法的标记方法

方法 标记法 eg
实例方法 类名#方法名 Array#each、Array#inject
类方法 类名.方法名或类名::方法名 Array.new或者Array::new

ruby中方法的定义

语法:
def 方法名 (参数1,参数2,...)
希望执行的处理
end

eg:定义一个方法,接受用户名作为参数,打印hello,用户名

def hello(name)
puts "hello,#{name}!"
end
hello('ruby') #hello,ruby!

给方法指定默认值

def hello(name="python")
puts "hello,#{name}!"
end hello('ruby') #hello,ruby!
#使用默认参数调用方法
hello() #hello,python!

当有个多个参数时,指定默认值的参数只能放在最后面。

def cal(a,b=1,c=2)
puts a+b+c
end cal(1) #=>4
cal(1,2) #=>5
cal(1,2,3) #=>6

方法的返回值

使用return方法指定返回值

def volume(x,y,z)
return x*y*z;
end

省略return语句时,使用最后方法的最后一条执行语句的执行的执行结果作为返回值。

def volume(x,y,z)
x*y*z;
end
p volume(1,2,3) #=>6

使用return语句提前终止方法的执行

def volume(x,y,z)
if x=0
puts "x不能为0"
return;
end
x*y*z;
end
p volume(0,2,3) #=>nil

省略return的参数,返回值为nil.

定义带块的方法

使用yield定义代块的方法

eg:定义一个myloop方法,实现loop的效果。

def myloop
while true
yield #执行块
end
end
num=1 myloop do
puts "hello"
if(num>10)
break
end
num*=2
end

参数个数不确定的方法

使用“*变量”的形式来定义参数个数不确定的方法,以数组的形式传入参数

def foo(*args)
args
end
p foo(1,2,3) #=>[1,2,3]

“*变量名”这种形式的参数只能在参数列表中出现一次。位置可以时开始、中间

、结束

def foo(b,*args,a)
puts a+b #=>5
args
end
p foo(1,2,3,4) #=>[2,3]

关键字参数

关键字参数名和参数值成对的传入方法内部使用。从而可以忽略参数的顺序.

当不传入关键字参数,还可以使用定义函数的时的默认值作为参数。

def 方法名 (参数1:值1,参数2:值2,...)
希望执行的处理
end

eg:

def volune(x:1,y:2,z:3)
x*y*z
end
p volune(x:1,y:2,z:3) #6
p volune(z:3,y:2,x:1) #6
p volune(x:2) #12

如何不需要指定默认值,可以使用“参数名:”,这样调用的时候必须传入参数

def volune(x:,y:2,z:3)
x*y*z
end
p volune(x:1,y:2,z:3) #6
p volune(y:2,z:3) #error

使用"**变量"收集未定义的参数(以散列的形式保存),

def volune(x:1,y:2,z:3,**args)
puts args #{:a=>1, :b=>2}
x*y*z
end
p volune(x:1,y:2,z:3,a:1,b:2) #6

关键字参数和普通的参数搭配使用

def func(a,b:1,c:2)
~~
end
func(1,b:2,c:3)

用散列传递参数

可以把散列作为个关键字参数传给方法。此时散列的健只能用符号,可以省略

定义了默认值的关键字参数,但是不能传递多余的参数。

def volune(x:1,y:2,z:3)
x*y*z
end
args1={x:1,y:2,z:3}
p volune args1 #6
args2={x:1,y:2}
p volune args2 #6
args3={x:1,y:2,z:3,a:4}
p volune args3 #error

把数组分解为参数,使用*数组分解参数,但是数组参数的个数要和方法的一致

def foo(a,b,c)
a+b+c
end
p foo(1,2,3)
args1=[2,3]
p foo(1,*args1)
args2=[1,2,3]
p foo *args2

散列作为普通参数传递给方法时,如果是最后一个参数可以省略{}.

def foo(a,hash)
puts hash
end
foo(1,{a:1,b:1})
foo(1,a:1,b:1)

ruby基础(二)的更多相关文章

  1. Ruby语法基础(二)

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

  2. Python全栈开发【基础二】

    Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...

  3. Bootstrap <基础二十九>面板(Panels)

    Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...

  4. Bootstrap <基础二十八>列表组

    列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...

  5. Bootstrap<基础二十七> 多媒体对象(Media Object)

    Bootstrap 中的多媒体对象(Media Object).这些抽象的对象样式用于创建各种类型的组件(比如:博客评论),我们可以在组件中使用图文混排,图像可以左对齐或者右对齐.媒体对象可以用更少的 ...

  6. Bootstrap <基础二十六>进度条

    Bootstrap 进度条.在本教程中,你将看到如何使用 Bootstrap 创建加载.重定向或动作状态的进度条. Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet ...

  7. Bootstrap <基础二十五>警告(Alerts)

    警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个 ...

  8. Bootstrap<基础二十四> 缩略图

    Bootstrap 缩略图.大多数站点都需要在网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 ...

  9. Bootstrap <基础二十三>页面标题(Page Header)

    页面标题(Page Header)是个不错的功能,它会在网页标题四周添加适当的间距.当一个网页中有多个标题且每个标题之间需要添加一定的间距时,页面标题这个功能就显得特别有用.如需使用页面标题(Page ...

随机推荐

  1. 折腾kubernetes各种问题汇总-<1>

    折腾kubernetes各种问题汇总-<1> 折腾部署fluend-elasticsearch日志,折腾出一大堆问题,解决这些问题过程中,感觉又了解了不少. 如何删除不一致状态下的rc,d ...

  2. 常见SQL命令总结学习 -- <1>

    SQL学习网练习记录 参考1:http://sample.jimstone.com.cn/xsql/Course/4.html 参考2:http://sample.jimstone.com.cn/xs ...

  3. ASP.NET扩展库之Http日志

    最佳实践都告诉我们不要记录请求的详细日志,因为这有安全问题,但在实际开发中,请求的详细内容对于快速定位问题却是非常重要的,有时也是系统的强力证据.Xfrogcn.AspNetCore.Extensio ...

  4. Gson?So easy.

    1.概述 这篇文章主要讲述了Gson的使用.包括从最基础的基本类型的序列化,到对象,数组,集合,再到Gson注解,Gson Builder,再到格式化,自定义序列化与反序列化等内容. 另外文章篇幅较长 ...

  5. Prometheus【node_exporter】+grafana监控云主机

    下面说一下这个开源软件的安装实践过程,目标如下: 在监控服务器上安装prometheus 在被监控环境上安装exporter 安装grafana 在监控服务器上安装prometheus 开始安装pro ...

  6. Nest 中处理 XML 类型的请求与响应

    公众号及小程序的微信接口是通过 xml 格式进行数据交换的. 比如接收普通消息的接口: 当普通微信用户向公众账号发消息时,微信服务器将 POST 消息的 XML 数据包到开发者填写的 URL 上. - ...

  7. 【原创】【基础】一文搞懂严蔚敏数据结构SqList &L和SqList L、ElemType &e和ElemType e

    旁白 最近小渔夫在看严蔚敏.李冬梅<数据结构 c语言版>(第2版),学到第二章顺序表的实现时,看到函数参数一会是SqList &L.一会又是SqList L.一会ElemType ...

  8. 【全网首发】鸿蒙开源三方组件--强大的弹窗库XPopup组件

    目录: 1.介绍 2.效果一览 3.依赖 4.如何使用 5.下载链接 6.<鸿蒙开源三方组件>文章合集 1. 介绍 ​ XPopup是一个弹窗库,可能是Harmony平台最好的弹窗库.它从 ...

  9. 软件调研——GoodNotes 5与Notability

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 作业要求 我在这个课程的目标是 积累软件开发经验,提高工程能力 这个作业在哪个具体方面帮助我实现目标 深入调 ...

  10. OO第四单元与全课程总结

    OO第四单元与全课程总结 一.作业代码架构设计 1.第一次作业 作业类图如下: 具体架构设计: 第一次作业的全部查询工作都是和类图有关,需要解决的主要问题就是如何解析原有UML类图数据的结构,并形成自 ...