`
singleant
  • 浏览: 378209 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【ruby】ruby语言的几个特性总结

    博客分类:
  • ruby
阅读更多

最近在学习ruby,我觉得学习一门语言要先了解语言的基本特性,然后再深入语法、细节特性等。

所以先从ruby语言的特性入手,结合例子简单总结了几点,才真正开始学没多久,绝对不全面,还需后续的学习再补充。

 

 

1.纯面向对象的

在ruby世界里所有的都是对象,包括方法、类、模块。也包括字符、数字、bool等基本类型。
如 
3.times { puts "Hi!" }  #完成三次循环输出
运行结果:
Hi!
Hi!
Hi!

3是一个整型对象,可以直接作为对象调用对象的方法times. 方法的参数是一个函数也是一个对象。
puts "#{'a'.class.superclass}"  
 
类本身也是对象,有成员变量和方法。
这个跟java语言有一些不一样的地方,java有原始基本类型和类之分,对原始基本类型有不一样的处理。

2.动态性、灵活性、弱类型

ruby是动态的编程语言。不需要进行编译,没有编译的过程。所有都是在运行期进行构建的。有点类似js的运行机制。在运行期修改一个类的行为是很简单的。这个和java里通过aop等技术实现简单得多。
例:
class Integer
  def more
    return self+1
  end
end
puts 3.more
puts 4.more
class Integer
  def more
    return self+2
  end
end
puts 3.more
puts 4.more
运行结果:
4
5
6
7
从上面来看 class Integer不代表定义一个新的类,而有可能现成的类,进行结构修改。
给整型增加了一个more方法,同时又在后面修改了more方法的行为。
类可以随时增加、丢弃或修改自己的方法,这个给程序提供了很大的灵活性。弱类型不必多说,不需要给方法写返回类型,定义变量也不需要制定类型,运行期动态识别类型。

3.模块的概念

除了类,ruby还有模块的概念。
模块包含方法集,但是没有实例概念,不能实例化。也可以说模块是无状态的,有点类似静态方法。感觉这个是提供面向过程编程语言的一个特性,就是函数复用。
模块的方法可以很简单的的织入到类里面。
如:
##module test
module A
def add(a,b)
  return a+b
end
end

module B
     def sub(a,b)
       return a-b
     end
end

class Math2
include A
include B
end

ma=Math2.new
sum1=ma.add(3,4)
sum2=ma.sub(7,3)
puts "sum1: #{sum1}"
puts "sum2: #{sum2}"
 
运行结果:
sum1: 7
sum2: 4

以上定义了两个模块,并把模块织如到类里面。织入和继承有区别,感觉就像是组合和继承的差别。

4.强大的反射和元编程

反射就是可以了解类本身的结构,ruby提供和强大的反射技术,这个和java类似。
如:
#reflect
puts "#{'a'.class}"                    #列出字符串类名
puts "#{'a'.class.superclass}"         #列出字符串父类名
puts "#{'a'.class.methods}"            #列出字符串类方法列表
puts "#{'a'.class.instance_methods}"   #列出字符串实例方法列表
  结果:
String
Object
[:try_convert, :allocate, :new, :superclass, :freeze, :===, :==, :<=>, :<, :<=, :>, :>=, :to_s, :included_modules, :include?, :name, :ancestors, :instance_methods, :public_instance_methods, :protected_instance_methods, :private_instance_methods, :constants, :const_get, :const_set, :const_defined?, :const_missing, :class_variables, :remove_class_variable, :class_variable_get, :class_variable_set, :class_variable_defined?, :public_constant, :private_constant, :module_exec, :class_exec, :module_eval, :class_eval, :method_defined?, :public_method_defined?, :private_method_defined?, :protected_method_defined?, :public_class_method, :private_class_method, :autoload, :autoload?, :instance_method, :public_instance_method, :nil?, :=~, :!~, :eql?, :hash, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :frozen?, :inspect, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :respond_to_missing?, :extend, :display, :method, :public_method, :define_singleton_method, :object_id, :to_enum, :enum_for, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__, :__id__]
[:<=>, :==, :===, :eql?, :hash, :casecmp, :+, :*, :%, :[], :[]=, :insert, :length, :size, :bytesize, :empty?, :=~, :match, :succ, :succ!, :next, :next!, :upto, :index, :rindex, :replace, :clear, :chr, :getbyte, :setbyte, :byteslice, :to_i, :to_f, :to_s, :to_str, :inspect, :dump, :upcase, :downcase, :capitalize, :swapcase, :upcase!, :downcase!, :capitalize!, :swapcase!, :hex, :oct, :split, :lines, :bytes, :chars, :codepoints, :reverse, :reverse!, :concat, :<<, :prepend, :crypt, :intern, :to_sym, :ord, :include?, :start_with?, :end_with?, :scan, :ljust, :rjust, :center, :sub, :gsub, :chop, :chomp, :strip, :lstrip, :rstrip, :sub!, :gsub!, :chop!, :chomp!, :strip!, :lstrip!, :rstrip!, :tr, :tr_s, :delete, :squeeze, :count, :tr!, :tr_s!, :delete!, :squeeze!, :each_line, :each_byte, :each_char, :each_codepoint, :sum, :slice, :slice!, :partition, :rpartition, :encoding, :force_encoding, :valid_encoding?, :ascii_only?, :unpack, :encode, :encode!, :to_r, :to_c, :>, :>=, :<, :<=, :between?, :nil?, :!~, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :frozen?, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :respond_to_missing?, :extend, :display, :method, :public_method, :define_singleton_method, :object_id, :to_enum, :enum_for, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__, :__id__]
[:mymethod, :test_m1, :test_m2, :test_m3, :nil?, :===, :=~, :!~, :eql?, :hash, :<=>, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :frozen?, :to_s, :inspect, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :respond_to_missing?, :extend, :display, :method, :public_method, :define_singleton_method, :object_id, :to_enum, :enum_for, :==, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__, :__id__]

元编程:
可以认为是写生成代码的代码。
以下例子:
#元编程
class TestMeta
def mymethod(n)
puts "in m#{n}"
end
h = {"m1" => 1, "m2" => 2, "m3" => 3}

h.each do |name,index|
define_method("test_#{name}") do
  mymethod(index)
  end
end
end

test=TestMeta.new
puts "#{test.class.instance_methods}"
test.test_m1
test.test_m2
test.test_m3
 
结果:
in m1
in m2
in m3
没有显示为TestMeta类定义test_m1,test_m2,test_m3方法,但是可以直接调用,原因是通过definemethod定义了这个三个方法。


其他特性,等有总结再补。。。
0
0
分享到:
评论

相关推荐

    基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言.zip

    对于初学者,可以从以下几个方面入手学习Ruby: 1. 学习基础语法:了解变量、常量、运算符、控制结构(条件语句、循环)、函数、类和模块的使用。 2. 掌握面向对象:理解类和对象的关系,继承、封装和多态的概念。...

    Ruby脚本语言经典教程.pdf

    Ruby的几个核心知识点如下: 1. **面向对象编程(OOP)**:Ruby是一种纯面向对象的编程语言。这意味着在Ruby中,几乎任何事物都是对象,包括数字和字符串。Ruby中的面向对象编程可以让你以直观的方式编写代码,通过...

    用Python,Lua和Ruby语言设计游戏

    标题提到的"用Python, Lua 和 Ruby语言设计游戏",这三种动态语言各自拥有独特的优点,适用于不同的游戏开发场景。接下来,我们将深入探讨每种语言在游戏开发中的应用、特点以及它们如何协同工作。 **Lua** Lua 是...

    Ruby Under a Microscope An Illustrated Guide to Ruby Internals

    Ruby的设计者在创建Ruby语言时,吸收了其他编程语言,尤其是Lisp的许多优秀特性,这些特性在Ruby的内部实现中扮演了重要角色。 Ruby的语法解析也是本书讨论的内容之一。如何将程序员编写的代码通过一系列的语法规则...

    ruby写的几个小算法

    在Ruby编程语言中,算法是解决问题或执行任务的步骤序列,它们是计算机科学的基础。这里我们关注的是两个关键的算法领域:排序和查找。在给定的压缩包中,`sort.rb` 和 `search.rb` 文件分别包含了实现这些算法的...

    ruby官方chm文档

    《ruby23.chm》文档可能是整个Ruby语言的综合指南,可能包含前面几个文档的综合信息,或者涵盖版本更新、社区资源、安装与配置等内容。它可以帮助你全面了解Ruby生态系统,包括安装Ruby解释器、设置开发环境、获取...

    Ruby编程Ruby Programming

    根据提供的文件信息,我们将深入探讨与“Ruby编程Ruby Programming”这一主题相关的几个核心知识点。这本面向初学者和高级读者的指南旨在全面介绍Ruby编程语言的基础及其高级特性,因此我们将从多个角度来解析这些...

    Ruby Programming

    《Programming Ruby》被誉为是最好的Ruby编程书籍之一,它不仅详尽地介绍了Ruby语言的基础知识,还深入探讨了Ruby的核心概念和技术细节。这本书由David Thomas、Andy Hunt、Thomas A.EW Matthews和David Heinemeier ...

    Ruby-RubyCompiler针对Ruby设计的AOTAOT编译器

    Ruby Compiler的实现通常涉及以下几个关键步骤: 1. **词法分析**:首先,编译器需要将Ruby源代码分解成一系列的词法单元(tokens),这些词法单元是构成Ruby语句的基本元素,如关键字、标识符、常量、字符串等。 ...

    Ruby语言教程大纲.zipRuby语言教程大纲.zip

    从压缩包的文件名来看,我们可以推测教程可能包括以下几个部分: 1. **基础概念**:这部分可能会介绍Ruby的基本特性,如动态类型、垃圾回收机制、以及它与其他编程语言的区别。还会涉及Ruby的安装,开发环境的设置...

    Ruby 基础语法 视频教程1

    这个"Ruby基础语法视频教程1"涵盖了几个关键的概念,包括变量、变量规则以及表达式。以下是对这些主题的详细解释: 1. 变量(Variables): 在Ruby中,变量用于存储数据,并在程序的不同位置使用。Ruby有五种不同...

    Ruby语言中文教程

    在学习Ruby时,你需要了解以下几个关键概念: 1. 类(Class)与对象(Object):类是对象的蓝图,对象是类的实例。你可以定义自己的类,创建自定义对象。 2. 方法(Method):Ruby中的函数称为方法,用于封装代码...

    Ruby+编程语言的基础知识:变量、运算符、流程控制

    Ruby语言的设计哲学强调代码的可读性和简洁性,也被称为“编程者的天堂”。Ruby广泛应用于网络应用程序开发,特别是Ruby on Rails框架(简称Rails)的出现,大大提高了Web应用开发的效率。 在Ruby编程语言的基础...

    ruby2.1.6安装文件

    在Ruby 2.1.6中,有几个重要的改进和特性值得一提: 1. **改进的性能**:Ruby 2.1系列引入了一些优化,使得整体运行速度有所提升。例如,YARV(Yet Another Ruby VM)虚拟机的优化使得代码执行更高效。 2. **钻石...

    ruby192安装包

    Ruby192安装包,如其名所示,是针对Ruby语言1.9.2版本的一个安装程序。这个版本引入了一些关键的性能优化和新的特性,例如改进的垃圾回收机制,使得内存管理更加高效。此外,1.9.2版本还对Unicode支持进行了增强,...

    Hprose ruby 说明文档

    在 Hprose Ruby 中,主要有以下几个关键概念: - **服务(Service)**:Hprose 服务是提供远程方法调用的实体,你可以将任何 Ruby 对象注册到服务中,然后其他客户端就可以通过网络调用这些对象的方法。 - **...

    ruby1.8.5 和locale.properties

    Ruby 1.8.5 是一个古老的 Ruby 语言版本,发布于2007年,它包含了许多在现代 Ruby 版本中已经被废弃或者改进的功能。这个版本在当时是广泛使用的,尤其对于初学者和一些特定项目来说。Ruby 1.8.5 的主要特性包括元...

    ruby入门书籍

    "ruby中文文档.chm"可能是对Ruby语言的中文详细指南,涵盖了基本语法、数据类型、控制结构、函数、类和对象、模块、异常处理、文件操作、网络编程等各个方面。CHM文件是微软的一种帮助文件格式,通常包含索引、搜索...

    ruby.rar

    在"ruby.rar"这个压缩包中,包含了三本中文教程,可以帮助初学者和经验丰富的开发者深入理解Ruby语言的核心概念和高级特性。 首先,让我们探讨一下Ruby的基础知识。Ruby由日本人松本行弘(Yukihiro Matsumoto)于1995...

Global site tag (gtag.js) - Google Analytics