Ruby中的方法(函数)学习总结

1、Ruby中方法名和变量名的命名规则一样(以小写字母开头,单词之间的分隔使用“_”,),不过可以在方法名后边带上!(重磅方法)或者?(布尔类型返回值)。

2、方法的参数请使用(),参数都是局部变量,可以为这些参数设置默认值,带“*”的参数是可选动态参数,可以传入一个或者多个,如果有普通参数,也有可选参数,可选参数要放在最后,如下边示例代码。

代码如下:

def read_book(chinese='水浒传',english='Jane Eyre',*others)
  puts "中文书籍:#{chinese},English book:#{english}"
  temp=''
  others.each do |o|
    temp<<o<<' '
  end
  puts "其他可选书籍:#{temp}"
 
end

read_book
# 输出:中文书籍:水浒传,English book:Jane Eyre
read_book('西游记','Rails','红楼梦','三国演义','封神演义','隋唐演义')
# 输出:
# 中文书籍:西游记,English book:Rails
# 其他可选书籍:红楼梦 三国演义 封神演义 隋唐演义

3、方法的返回值不需要进行声明,默认情况下最后一行代码为返回值,但是若有条件判断返回的情况,需要用return声明,如下示例代码:

代码如下:

def late_for_work?(minutes)
  return true if minutes>=15
  false
end

late_for_work?(10)    #false
late_for_work?(15)    #true

4、重磅方法是指方法名后带“!”的方法,普通方法返回的是原对象的一个拷贝,而重磅方法返回的始终是原对象本身,如下边示例代码:

代码如下:

x='hello'
y=x.upcase
puts "x:#{x},y:#{y}"   #输出:x:hello,y:HELLO   x的值未发生改变

x='hello'
y=x.upcase!
puts "x:#{x},y:#{y}"   #输出:x:HELLO,y:HELLO   x的值已经发生改变

5、方法中可以使用别名关键字“alias”生成方法的一个拷贝,即使原方法发生了变化,别名拷贝也不会发生变化,如下示例代码:

代码如下:

def show_alias
  puts 'Before alias!'
end
alias alias_foo show_alias
def show_alias
  puts 'After alias!'
end
show_alias   #输出:After alias!
alias_foo    #输出:Before alias!

6、Ruby的方法可以一次性返回多个值,不过实质上只是表面看来是返回多个值,本质上是返回了一个数组,数组中存储多个返回值,接收时可以直接定义多个变量一次性接收,如下示例代码:

代码如下:

def more_result_foo
 x=5
 y=x*x
 z=y-x+2
 return x,y,z  #返回x,y,z三个值
end
a,b,c=more_result_foo #a,b,c接收返回的x,y,z
m=more_result_foo  #m接收返回的x,y,z
puts a,b,c    #输出:5 25 22
puts m     #输出:5 25 22
puts m.class   #输出:Array

(0)

相关推荐

  • Ruby中常用的字符串处理函数使用实例

    1.返回字符串的长度 复制代码 代码如下: str.length => integer 2.判断字符串中是否包含另一个串 复制代码 代码如下: str.include? other_str => true or false "hello".include? "lo"   #=> true "hello".include? "ol"   #=> false "hello".includ

  • ruby中的双等号==问题详解

    前两天在写代码的时候,突然收到警告说项目代码中存在 XSS 漏洞,遂立即根据报告的 URL 排查页面代码,虽然很快就修复了,而且同样问题的讨论两年前就有了,一般来说相对有经验的同学也应该都知道这个点,但是还是觉得有必要写出来,再次提醒一下其他小伙伴,避免踩坑. 问题根源 其中,在找到的漏洞出现的地方,都存在类似以下这样的 slim 代码: input class='xxx' value==params[:account] 问题就出在双等号 == 上,因为在 slim 跟 ERB 模板(其他模板比

  • Ruby里4种比较函数(equal?, eql?, ==, ===)详解

    Ruby里面有4种比较方法,equal?, eql?, ==, ===,而且在不同的类里面表现的很不一样.在使用的时候也特别容易搞糊涂. 这篇博文将演示一些代码来讲解各个方法. == - 类意义上的 相等,需要每个类自己定义实现 在特定类中觉得两个对象是否相同,需要看业务上的逻辑表象,所有由程序员覆盖该方法的定义,决定两个对象是否相同. 比如 String 类,他是来计较实际的文字串是否相同,而不在意是否来自同一个内存区域. >> a = "abc" #=> &quo

  • Ruby实现命令行中查看函数源码的方法

    如果要查看 ActiveRecord 的 update_attribute 函数的源代码,一个比较常见的方法是直接在 Rails 源码中搜索 def update_attribute.博客 The Pragmatic Studio 介绍了一个更方便的技巧,在 Ruby 命令行中就能启动编辑器直接访问. 通过 Object#method 方法可以获得 update_attribute 方法的对象,而 Method#source_location 则返回这个方法定义的文件和位置.有了这个信息后,就能

  • 详解Ruby中的方法概念

    Ruby方法跟其他编程语言中的函数非常相似, Ruby方法用于捆绑到一个单元中的一个或多个重复的语句. 方法名称应以小写字母开始.如果一个方法的名称以大写字母开始,Ruby可能会认为这是一个常数,因此可以正确解析调用. 方法应该定义Ruby的之前调用他们,否则会引发一个异常未定义的方法调用. 语法: def method_name [( [arg [= default]]...[, * arg [, &expr ]])] expr.. end 所以,可以定义一个简单的方法如下: def meth

  • Python中的自定义函数学习笔记

    定义一个什么都不做的函数 复制代码 代码如下: >>> def a(): ... pass ... >>> def printHello(): ... print("hello") ... >>> printHello() hello >>> callable(printHello) True 顾名思义,callable函数用于判断函数是否可以调用: 有书上说,callable在Python3.0中已经不再使用,而

  • Ruby中的String对象学习笔记

    1.String对象定义 String对象的定义可以使用""和'',对于单纯的字符串,推荐使用''进行定义,效率比""高,""与''的区别在于,''内的字符串定义后就是最终形态,即使如\n换行符,也会原样输出,而""更像是一个表达式,解析器会针对其中的特殊字符进行处理,然后才会输出,如下示例代码: 复制代码 代码如下: i  = 100 s1 = 'The value of i variable is #{i}!\n' #Th

  • Ruby中的方法(函数)学习总结

    1.Ruby中方法名和变量名的命名规则一样(以小写字母开头,单词之间的分隔使用"_",),不过可以在方法名后边带上!(重磅方法)或者?(布尔类型返回值). 2.方法的参数请使用(),参数都是局部变量,可以为这些参数设置默认值,带"*"的参数是可选动态参数,可以传入一个或者多个,如果有普通参数,也有可选参数,可选参数要放在最后,如下边示例代码. 复制代码 代码如下: def read_book(chinese='水浒传',english='Jane Eyre',*ot

  • JavaScript的jQuery库中ready方法的学习教程

    学习 jQuery 有许多途径,我们今天从 jQuery 的 ready 函数开始.本例中的代码都来自于 jQuery 脚本库. 如果你使用过 jQuery , 就必然使用过 ready 函数,它用来注册当页面准备好之后可以执行的函数. 问题来啦,我们的页面什么时候准备好了呢? onload 事件 最基本的处理方式就是页面的 onload 事件,我们在处理这个事件的时候,可以有多种方式,即可以通过 HTML 方式,直接写在 body 元素的开始标记中,也可以使用事件注册的方式来使用,这又可以分为

  • Python3.2中的字符串函数学习总结

    Sequence Types sequence类型有六种:strings, byte sequences (bytes objects), byte arrays(bytearray objects), list, tuple, range objects. sequence类型都支持的通用操作: 成员检查:in.not in 连接:+ 复制:* 下标取值:s[i] 切片:s[i : j] 长度检查:len(s) 最小值:min(s) 最大值:max(s) 索引取值:s.index(i) 字符串

  • Java编程中void方法的学习教程

    void 关键字 本节说明如何声明和调用一个void方法. 下面的例子声明了一个名为printGrade的方法,并且调用它来打印给定的分数. 示例 public class TestVoidMethod { public static void main(String[] args) { printGrade(78.5); } public static void printGrade(double score) { if (score >= 90.0) { System.out.println

  • Ruby中的Range对象学习笔记

    Range是范围对象的类,定义的时候可以使用范围操作符".."或者"...",".."生成的范围对象包括起点和终点,"..."生成的范围对象不包括起点和终点,范围是由是一序列有顺序.有规律的元素对象组成,任何有顺序,有规律的一组对象,都可以用Range对象来定义,如数字.字母.字符串.甚至时间 1.Range对象的定义 复制代码 代码如下: r1=1..5     #定义范围对象r1,包括元素1,2,3,4,5 r2=Rang

  • Ruby中Block和迭代器的使用讲解

    我们来简单地描述Ruby的一个独特特性.Block,一种可以和方法调用相关联的代码块,几乎就像参数一样.这是一个不可思议的功能强大的特性. 可以用Block实现回调(但它比Java的匿名内部(anonymous inner)类更简单),传递一组代码(但它远比c的函数指针灵活),以及实现迭代器. Block只是在花括号或者do...end之间的一组代码. {puts "Hello"} #this is a block do ### club.enroll(person) #and so

  • 实例讲解Ruby中的钩子方法及对方法调用添加钩子

    钩子方法有些类似事件驱动装置,可以在特定的事件发生后执行特定的回调函数,这个回调函数就是钩子方法(更形象的描述: 钩子方法可以像钩子一样,勾住一个特定的事件.),在Rails中before\after函数就是最常见的钩子方法. Class#inherited方法也是这样一个钩子方法,当一个类被继承时,Ruby会调用该方法.默认情况下,Class#inherited什么都不做,但是通过继承,我们可以拦截该事件,对感兴趣的继承事件作出回应. class String def self.inherit

随机推荐