美文网首页
Ruby学习基础(二) — 杂记

Ruby学习基础(二) — 杂记

作者: xautjzd | 来源:发表于2013-05-28 11:39 被阅读130次

1. String#chomp VS String#strip

首先String#chomp有可选的参数,而String#strip无参。其次,String#chomp在没有参数时,删除的是结尾的\n,\r和\r\n,而String#strip删除的是字符串头部和尾部的空格和换行符;String#chomp有字符串参数时,则将删除原字符串结尾和参数匹配的字符串。
eg:

"Hello world\n".chomp   =>"Hello world"
"  Hello world  ".strip      =>"Hello world"
"Hello world".chomp("world")   =>"Hello "

2. require_relative

看到module语法时,便试着写了个例子:新建了两个module,分别为moduleA.rb 和moduleB,然后在另一个文件中将这两个module引用进来,便使用:

require "moduleA"
require "moduleB"

但是最后在执行过程中出错,提示找不到require的两个文件,最后在ruby-china上寻求帮助,发现用:

require_relative "moduleA"
require_relative "moduleB"

即可解决。

其实require,require_relative,include等并不是Ruby的关键字,而是Kernel的实例方法。而Kernel则被Object类include,所有的对象都是Object类的实例,所以没有接收者。
其实require_relative方法内部还是调用了require方法,其源代码如下:

def require_relative(path)
   require File.join(File.dirname(caller[0]), path.to_str)
end

3. Module作用

Module作用有二:

  • 相当于命名空间,防止名字冲突

  • 实现了mixin功能

Module里面的一般方法定义都是以Module的名字为前缀,或者以self为前缀(self相当于module 的名字),相当于类中的类方法。如果方法不加前缀,则相当于Class中的实例方法,但是Module不是类,不能创建实例,所以不能有实例方法。这时可以在Class的定义中包含Module(使用include)。包含以后,module中定义的实例方法便能像在类中定义一样,可以由类实例化的对象来访问。eg:

module Debug
     def who_am_i?
         "#{self.class.name} (\##{self.id}) :  #{self.to_s}"
     end
end
class Test
   include Debug
end
obj = Test.new("Hello")
obj.who_am_i?

Module中定义的实例变量,在包含Module的Class中也可以进行访问。当然这一举措也会引出问题:如果一个Class中include多个Module,并且这些Module中都定义了相同的实例变量,那么在Class中操作这些实例变量时将难以区分,所以会产生意想不到的错误,所以在Module中一般不使用实例变量,如有特殊情况需要使用,则实例变量名一定要唯一,最常见的做法便是将Module的名字作为实例变量的名字的前缀部分。

而Mix-in则是受限制的多重继承。现在的Ruby只能继承一个类,但是可以通过include继承多个模块。

类 = 模块 + 实例化能力

相关文章

  • Ruby学习基础(二) — 杂记

    1. String#chomp VS String#strip 首先String#chomp有可选的参数,而Str...

  • ROR高级开发工程(蛋人网)

    01 Ruby on Rails介绍02 Ruby on Rails快速上手03 Model基础学习04 Mode...

  • Ruby基础知识-基础解释

    Ruby基础知识-基础解释 ruby相关的命令行ruby命令行

  • Ruby基础学习笔记

    目录 Ruby的基本概念Ruby的控制语句Ruby的循环Ruby的数组与散列 Ruby的基本概念 运行Ruby的方...

  • Ruby 语言进阶

    Intro to Ruby (Ruby 基础) 什么是ruby?ruby是动态的(没有固定的类型),反射性的,面向...

  • ruby基础

    ruby学习基础 inputthing = gets.chomp.to_i if语句 循环语句 循环异常抛出 fu...

  • ruby on rails 资料收集录

    Ruby ruby基础教程(中文第四版) 20分钟体验 Ruby Ruby.new Rails Ruby on R...

  • Ruby升级杂记

    使用rvm管理ruby 一、安装rvm 依次在控制台执行下列代码: 等待执行完毕执行下列代码查看rvm版本,显示则...

  • Ruby 基础 ---学习笔记(一)

    系统基于 Mac 用的是Mac 自带的Ruby 简单的打印: 命令操作 文件操作

  • Ruby基础知识学习

      最近在学习Ruby,练习代码和相关笔记都放在了github上面,等有空了再慢慢的整理成博客笔记。目前正在看《R...

网友评论

      本文标题:Ruby学习基础(二) — 杂记

      本文链接:https://www.haomeiwen.com/subject/klhxtttx.html