`
luoping0425
  • 浏览: 108827 次
  • 性别: Icon_minigender_2
  • 来自: 赣州
文章分类
社区版块
存档分类
最新评论

Ruby method 学习笔记

阅读更多
学习笔记,来自于Programming Ruby 1.9

Ruby 关于Method

一、 定义方法
使用关键字 def
方法名称以小写字母或下划线开头,后面跟着字母、数字和下划线
有的方法名后面跟着?,!或=
方法名有?通常意味着方法返回boolean型结果
例:
1.even? # => false
2.even? # => true
1.instance_of?(Fixnum) # => true


方法名后有!,则此方法的接收者将被修改
方法名后加=,通常意味着赋值

Ruby方法的参数可以设定默认值
def cool_dude(arg1="Miles", arg2="Coltrane", arg3="Roach")
"#{arg1}, #{arg2}, #{arg3}."
end
cool_dude # => "Miles, Coltrane, Roach."
cool_dude("Bart") # => "Bart, Coltrane, Roach."
cool_dude("Bart", "Elwood") # => "Bart, Elwood, Roach."
cool_dude("Bart", "Elwood", "Linus") # => "Bart, Elwood, Linus."

二、可变长度的参数
在参数前加*号,用以接收多个参数值或可变参数值
def varargs(arg1, *rest)
"arg1=#{arg1}. rest=#{rest.inspect}"
end

varargs("one") # => arg1=one. rest=[]
varargs("one", "two") # => arg1=one. rest=[two]
varargs "one", "two", "three" # => arg1=one. rest=[two, three]


使用*号表示一个在方法中不使用,但可能在父类中使用到的参数
class Child < Parent
  def do_something(*not_used)
    # our processing
    super
  end

end


这种情况下,可以不需要写参数名称,只使用*表示参数

class Child < Parent
  def do_something(*)
    # our processing
    super
  end
end


在Ruby1.9中,我们可以把此类参数放在任何位置,如:
def split_apart(first, *splat, last)
  puts "First: #{first.inspect}, splat: #{splat.inspect}, " +
    "last: #{last.inspect}"
end

split_apart(1,2)
split_apart(1,2,3)
split_apart(1,2,3,4)

produces:
First: 1, splat: [], last: 2
First: 1, splat: [2], last: 3
First: 1, splat: [2, 3], last: 4


三、方法和Block
在方法中使用block通常使用yield

def double(p1)
  yield(p1*2)
end

double(3) {|val| "I got #{val}" } # => "I got 6"
double("tom") {|val| "Then I got #{val}" } # => "Then I got tomtom"


然而,如果方法定义中的最后一个参数以&开头,则,所有相关的block都会转换为Proc对象。
class TaxCalculator
  def initialize(name, &block)
    @name, @block = name, block
  end

  def get_tax(amount)
    "#@name on #{amount} = #{ @block.call(amount) }"
  end
end

tc = TaxCalculator.new("Sales tax") {|amt| amt * 0.075 }
tc.get_tax(100) # => "Sales tax on 100 = 7.5"
tc.get_tax(250) # => "Sales tax on 250 = 18.75"


四、方法调用
方法的默认接收者为self
在一个类方法或module中的方法,接收者为类或module的名称

五、把参数传给一个方法
六、方法的返回值
每一个调用的方法都会有一个返回值。方法的返回值是最后一个语句执行的结果
def meth_one
  "one"
end

meth_one # => "one"

def meth_two(arg)
  case
  when arg > 0 then "positive"
  when arg < 0 then "negative"
  else "zero"
  end
end

meth_two(23) # => "positive"
meth_two(0) # => "zero"


Ruby有一个关于return 的语句
如果return多个值,则方法会返回一个数组
def meth_three
  100.times do |num|
    square = num*num
    return num, square if square > 1000
  end
end

meth_three # => [32, 1024]

num, square = meth_three
num # => 32
square # => 1024


七、Splat,将扩张集合到方法调用中
这个是Ruby1.9中的特性
之前我们看到在方法定义的参数中,在参数前加*,可以将多个参数值传给一个参数,
这里正好相反。
调用一个方法时,你可以把任意的集合或列举型对象转变成组合的元素,然后把这些元素传递给单独的参数了。在传递的数组参数前加上*。
def five(a, b, c, d, e)
  "I was passed #{a} #{b} #{c} #{d} #{e}"
end

five(1, 2, 3, 4, 5 ) # => "I was passed 1 2 3 4 5"
five(1, 2, 3, *['a', 'b']) # => "I was passed 1 2 3 a b"
five(*['a', 'b'], 1, 2, 3) # => "I was passed a b 1 2 3"
five(*(10..14)) # => "I was passed 10 11 12 13 14"
five(*[1,2], 3, *(4..5)) # => "I was passed 1 2 3 4 5"


八、让Blocks更加动态一些
如果方法的最后一个参数值有&,Ruby假定这是一个Proc对象,Ruby会把该Proc 对象转换为一个block,然后在方法中使用。
九、收集Hash变量
一般方法中,参数值对应一定的参数变量,传递参数就需要按照一定的顺序。
在Ruby中可以使用Hash的键值对,来传递参数。
class SongList
  def search(name, params)
    # ...
  end
end

list.search(:titles,
  { :genre => "jazz",
 :duration_less_than => 270
 })


此处,可以将Hash作为一个键=>值参数列表。
list.search(:titles,
  :genre => 'jazz',
  :duration_less_than => 270)


在Ruby1.9中,可以写成:
list.search(:titles, genre: 'jazz', duration_less_than: 270)

分享到:
评论

相关推荐

    学习Ruby的笔记以及Demo源码.zip

    学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及...

    Ruby学习笔记

    这个暑假回家没事干闲...恩,废话就少提,下面我学习Ruby的各个部分。其中Ruby风格这一部分是开放的,因为我暂时还没有形成自己的风格。我用xmind来记笔记,因此我只是把笔记搬到博客上,看看下面的图。好有爱啊!!!

    ruby学习笔记

    ruby基础笔记,自学笔记,ruby基础语法非常全面ruby基础笔记,自学笔记,ruby基础语法非常全面

    Ruby学习笔记(学习心得)

    Ruby学习笔记 01 类的属性与方法 02 访问控制 03 Container(Array/Hash) 04 Iterator 05 简单数据类型 06 范围 07 方法 08 条件控制 09 异常处理

    ruby编程学习笔记及demo

    Ruby是一种纯粹的面向对象编程语言。它由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)创建于1993年。 您可以在 www.ruby-lang.org 的 Ruby 邮件列表上找到松本行弘(まつもとゆきひろ/Yukihiro ...

    RubyStudy-master-ruby学习笔记

    学习 Ruby 的旅程即将开始! Ruby 是一种功能强大、灵活的编程语言,广泛应用于 Web 开发、脚本编写和系统管理等领域。下面是学习 Ruby 的一些实用建议:首先,了解 Ruby 的基本概念和语法。 Ruby 是一种面向对象的...

    个人ruby学习笔记

    从给定的文件信息中,我们可以提炼出一系列关于Ruby编程语言的重要知识点,涵盖基础语法、变量类型、...以上总结了Ruby的一些基础知识点,这些内容对于初学者掌握Ruby编程语言至关重要,同时也是进一步深入学习的基石。

    Ruby元编程基础学习笔记整理

    ### Ruby元编程基础学习笔记整理 #### 一、语言构建(Language Constructs) 在Ruby中,诸如变量、类和方法等元素统称为语言构建(Language Constructs)。这些构建块是构成Ruby程序的基础。 ##### 示例代码分析 ```...

    精华ruby学习笔记和代码

    这个笔记里包含了ruby的整型,字符串,浮点数,布尔等基础数据类型,还有数组,哈希hash的用法, 类的定义,函数方法,以及对象定义,其他高级用法解释,除了笔记记录的语法糖之外,还包含了一些解释性的代码,帮助...

    ruby笔记1ruby笔记1ruby笔记1

    标题中的"ruby笔记1ruby笔记1ruby笔记1"暗示了这是一份关于Ruby编程语言的学习笔记,可能包含了作者在学习过程中的重点、难点以及心得体验。描述中的内容重复了标题,进一步强调了这是关于Ruby的深入学习记录。标签...

    rubyinstaller-devkit-3.0.2-1-x64 and Ruby 学习笔记.7z

    Ruby是一种面向对象的脚本语言,它以其简洁、优雅的语法和强大的功能而闻名。...通过安装Ruby和DevKit,你可以轻松地编写、编译和运行Ruby代码,同时结合学习笔记,可以深入理解Ruby语言及其生态系统。

    Ruby学习:关于Ruby的学习笔记

    我对Ruby的学习笔记 评论 #i'm a sinlg eline comment =begin I'm a multiline comment! =end 资料来源 puts(writeln) 控制台输出/打印的Ruby方式 puts "hello world" 编写问候世界并返回nil 打印(写) 字符...

    Redis全套学习笔记 (带章节目录) 完整版pdf

    本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...

    ruby on rails 笔记(陈刚)

    从给定的文件信息来看,这份文档是陈刚关于Ruby on Rails的学习笔记,旨在帮助初学者更好地理解并掌握Ruby on Rails这一流行的Web开发框架。以下是对文档中提及的关键知识点的详细解析: ### 安装与配置 #### Ruby...

    Ruby 魔法 学习笔记之一

    一、向对象显示的发送消息 我们可以向对象直接发送消息: Ruby代码 代码如下:class HelloWorld def say(name) print “Hello, “, name end end hw = HelloWorld.new hw.send(:say,”world”) 我们通常使用hw.say(...

    Ruby知识点笔记

    Ruby是一种面向对象的脚本语言,其语法简洁且灵活。在Ruby中,标识名的命名规则至关重要,因为它们区分了不同类型的变量和方法。...学习并熟练掌握这些基础概念,将有助于深入理解和运用Ruby语言。

    学习 Ruby 的笔记以及 Demo(简介、语言特性、应用场景、Ruby 注释、Ruby 文件的构造与析构语句Ruby 变量等)

    Ruby 学习笔记 1、简介 定义:一种简单快捷的面向对象脚本语言 开发者:松本行弘 开发时间:1995年 设计目的:A PROGRAMMER'S BEST FRIEND【程序员的最佳朋友】 文件扩展名:rb 2、语言特性 真正的面向对象编程语言 ...

    学习 Ruby 的笔记以及 Demo.zip

    本资源“学习 Ruby 的笔记以及 Demo.zip”显然包含了关于Ruby编程的学习资料和一些实际示例代码,旨在帮助初学者理解并掌握Ruby的基础及进阶特性。 首先,让我们深入了解一下Ruby的核心特性: 1. 面向对象:Ruby是...

Global site tag (gtag.js) - Google Analytics