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

ruby语言学习总结

阅读更多

 

Ruby语言学习

 

   ruby的定位: programer's best friend

 

   它是一门面向程序员的语言,语法很灵活,功能很强大。 相比与严谨的java来说,ruby可谓敏捷的多了

 

    ruby是自顶向下执行的。哪怕是在类里面,也是一行接着一行执行代码的。要深入理解ruby的函数面,因为用好块(block)和闭包(closure)极大的提高了代码的简洁和可读

 

    rails : ruby 的 web框架。 基于 coc 的原则 和 ruby的动态语言特性可以很便捷的开发web应用。 类似于我们的webx框架

 

    gem : 有时候也叫做rubygems , 是ruby下的包管理器 。 类似于 maven

 

    ruby有它自己的虚拟机,会做ruby的内存管理,垃圾回收。 类似于java的jvm 。

 

    Rvm: ruby version manager 是一个让多版本ruby环境共存的一套解决方案。

 

    Jruby 100% 纯ruby实现的运行在java虚拟机下的语言,是结合ruby和java的桥梁

 

    irb : 交互式的ruby运行环境,做写小测试,学习非常不错

 

    ri : ruby的doc文档工具,非常强大

 

搭建ruby开发环境:

     http://www.ruby-lang.org/en/downloads/

 

 简单的介绍下我的环境搭建过程:

    由于我用的是ubuntu操作系统,所以参照 

   http://lanvige.iteye.com/blog/851836 安装了rvm,中间虽然有几个问题但是稍微下资料也都顺利解决了。Ri , irb ,gem等都没有问题。可是问题出在如果用netbeans进行debug的话,无法进行fast debug,有相应的依赖没有解决掉。网上查了些资料也没给出个解决方法。

    无奈之下就只有放弃rvm直接进行ruby环境安装了。超级简单,按如下:

    http://ryanbigg.com/2010/12/ubuntu-ruby-rvm-rails-and-you

    下载了个安装脚本,作者把所以该解决的依赖都解决了。所有问题都不在了。。。

 

ide用过radrails和netbeans , 感觉还是netbeans要好一点。

 

我的一些实践,近距离感觉一下ruby

 

1如何打印一句hello world

 java: 定义一个类,再定义一个main方法,然后编译,然后再运行

ruby:  

 

 

wuzhong@TAOBAOWDS46:~$ ruby -e "p 'hello'"
"hello"
 

 

 

ruby 类似于 java命令,指向的是他们的运行环境, -e 标识后面跟着一个ruby脚本  p 'hello';

p 就是print方法,内置在ruby core中,所以可以直接拿来用。

 

字符串可以用“ 也可以用 ' ,但是有区别的:

请看这个例子

 

 

a='hello'
puts "#{a}"
puts '#{a}'

输出的结果是:
hellohello echo
hello
#{a}
 

 

2ruby的类型结构

在ruby中,一切皆是对象。。这个比java更加要明确一点,毕竟java夹杂着原子类。

 

irb(main):012:0> /abc/.class
=> Regexp
irb(main):013:0> (1..9).class
=> Range
irb(main):002:0> 1.class
=> Fixnum
irb(main):003:0> "a".class
=> String
irb(main):004:0> nil.class
=> NilClass
irb(main):005:0> 111111111111111111111111111111111111111111111.class
=> Bignum
irb(main):006:0> 0.1.class
=> Float
irb(main):007:0> [1,2].class
=> Array
irb(main):013:0> {"a"=>1,"b"=>2}.class
=> Hash
irb(main):014:0> 
irb(main):015:0* Hash.new.class
=> Hash
irb(main):016:0> true.class
=> TrueClass
irb(main):017:0> false.class
=> FalseClass
 

 

 

3. 看一下 block的威力,大幅缩减代码量

 

irb(main):025:0> (1..10).each{|i| p i}
1
2
3
4
5
6
7
8
9
10
=> 1..10

irb(main):030:0> (1..10).each do |i|
irb(main):031:1* p i
irb(main):032:1> end
 

输出同样的结果

 

了解一下过程: 首先 1..10 这个返回的是一个Range。我们可以通过 (1..10).class来验证。

接下来我们需要迭代这个数组: ri Range 我们发现有个each方法。。ri Array.each参照doc文档就很简洁的写出上面的代码来了。 注意代码块 可以用 { } 也可以用 do end

 

 

wuzhong@TAOBAOWDS46:~/workspace/ruby/block$ more repeat.rb 
def repeat(n)
if block_given?
n.times { yield }
else
raise ArgumentError.new("I can't repeat a block you don't give me!")
end
end
repeat(4) { puts "Hello." }

p "=========================="
repeat(4)
wuzhong@TAOBAOWDS46:~/workspace/ruby/block$ ruby repeat.rb 
Hello.
Hello.
Hello.
Hello.
"=========================="
repeat.rb:5:in `repeat': I can't repeat a block you don't give me! (ArgumentError)
	from repeat.rb:11:in `<main>'
 

 

4.ruby 的语法糖,便于扩展。 

 

Ruby 是一个相当灵活的语言,她允许用户去改变她本身。 Ruby 的核心部分可以被更改或重新定义,模块可以被添加。Ruby 试着不去妨碍程序员。

比如(+) 是用做加法的运算符。如果你更喜欢使用易读的 plus 的话,你可以给 Ruby 的内建 Numeric 类添加一个函数。

 

class Numeric
  def plus(x)
    self.+(x)
  end
end
y = 5.plus 6
# y is now equal to 11
 

同样的元编程也是基于这个原理,定义或者覆盖原来的方法

 

 

 

 

5.ruby 继承

 

 

class Child < Father   

end
 

 

mixin

于其他面向对象语言不同,Ruby “有意”只提供单继承。不过 Ruby 拥有模块(在 Objective-C 里面叫做类别)。模块是把许多方法放在了一个类别里。

类可以混合一个模块,得到这个模块提供的所有方法。比如所有提供 each 方法的类可以混合 Enumerable 模块,来得到这个模块提供的所有方法,当然这些方法都会调用 each 做循环。

 

class MyArray
  include Enumerable
end
 

一般来说,Ruby 爱好者相对于复杂和限制颇多的多态继承方法来讲更偏向于这种混合方法。

这篇文章介绍的比较通俗易懂了

http://thinkinginruby.iteye.com/blog/148967

 

6. ruby的封装性

局部变量      以小写字母或下划线卡头         var _var

全局变量      以$开头                             $var

类变量         类中定义,以@@开头           @@var

实例变量      对象中定义,以@开头           @var

常量            以大写字母开头                   Var

 

 #定义了一个全局变量

$pub_var = "public var"

class Person
  #定义了一个类变量,类比于java的static
  @@name2 = $pub_var
  #实例变量 attr_accessor会自动生成get 和set方法
  attr_accessor :name

  def initialize
    #定义的局部变量
    age =12
    @name = "test"
    p age
#    @@name2 = "person"
#    name = "test123"
  end

  #定义一个类方法
  def self.name2
    @@name2
  end

 private
  def test
    p "test"
  end

  public
  def test2
    p "test2"
  end
end

ps = Person.new
p ps.name
p ps.age
#p ps.name2

p Person.name2
 

 

 

7. ruby 来处理xml

   应用场景主要是maven的pom文件,当前清空工程里有很多依赖库,但是都是乱序排列的

   目标: 通过该脚本对dependencies中的元素进行排序

   # To change this template, choose Tools | Templates

# and open the template in the editor.

$:.unshift File.join(File.dirname(__FILE__),'..','lib')

require 'rexml/document'
include REXML

class PomFormater

  def initialize(file_name)
    Dir.chdir("lib")
    raise Exception.new(file_name + " dosn't exist") unless File.file?(file_name)
    @doc = Document.new(File.new(file_name))
  end

  def sort
    dependencys = XPath.first(@doc, "*/dependencyManagement/dependencies")
    #p dependencys.size
    parent = dependencys.parent
    #p parent
    elements = Element.new("dependencies")
    parent.delete_element(dependencys)

    parent.add_element(elements)

    arr = Array.new
    taobao_arr = Array.new
    ali_arr = Array.new

    dependencys.each_element do |element|
      group_name = element.elements["groupId"].text.downcase
      if group_name =~ /com.taobao/
        taobao_arr << element
      elsif group_name =~ /com.alibaba/
        ali_arr << element
      else
        arr << element
      end
    end

    arr = arr.sort_by{|x| x.elements["groupId"].text.downcase }
    taobao_arr = taobao_arr.sort_by{|x| x.elements["groupId"].text.downcase }
    ali_arr = ali_arr.sort_by{|x| x.elements["groupId"].text.downcase }

    taobao_arr.concat(ali_arr).concat(arr)

    taobao_arr.each { |e| elements.add_element(e)  }
  end

  def out_put
    s = ''
    @doc.write(s)
    open("tmp.xml","w"){|f| f << s }
    p "please format it in your ide"
  end

end

测试代码

$:.unshift File.join(File.dirname(__FILE__),'..','lib')

require 'test/unit'
require 'pom_formater'

class Demo
  def foo
    p "this is demo.foo method"
  end
end

class PomFormaterTest < Test::Unit::TestCase
  def test_foo
    pf = PomFormater.new("pom_1.xml")
    pf.sort
    pf.out_put
  end

  def test_demo
    Demo.new.foo
  end
end
 

 

8. jruby的应用

the best of jvm . 是不是best暂且不予评论    

jruby能充分使用ruby的动态性和语法的简洁性,同时可以使用丰富的java企业级类库。 最终要的是可以直接集成到现有的javaee应用中去.  

 

知识我们需要安装jruby的运行环境,和jdk差不多,分别设置jruby_home 和 path 就OK了,使用起来也很方便。。

 require 'java' //jruby 需要申明这个,其余都一样了

include_class 'com.taobao.wuzhong.spring.Hello'
class JrubyHello  //千万不要用"< Hello"来实现接口,否则和java集成会报错
 def hello
 	p "this is jruby"
 end
end

 

  和java集成:

 	@Test
	public void test() throws ScriptException {

		ScriptEngineManager m = new ScriptEngineManager();
		ScriptEngine engine = m.getEngineByName("jruby");

		engine.getContext().setAttribute("a", new Integer(11), ScriptContext.ENGINE_SCOPE);
		engine.eval("puts 2 + $a");
	}
	
	另外如果使用spring的话,框架已经支持jruby和groovy了
	<lang:jruby id="jhello"
            script-interfaces="com.taobao.wuzhong.spring.Hello"
            refresh-check-delay="1000"
            script-source="classpath:com/taobao/wuzhong/spring/JrubyHello.rb">
        </lang:jruby>
 
 

 

补充资料:

ruby和java的异同

      http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/

      http://onestepback.org/articles/10things/

      http://blog.csdn.net/zl728/archive/2010/08/14/5812901.aspx

 

很好quickstart

      http://www.ruby-lang.org/en/documentation/quickstart/

 

闭包问题:

      http://www.ibm.com/developerworks/cn/java/j-cb01097.html

      http://www.blogjava.net/ponzmd/archive/2007/09/19/146552.html

 

 

 

 

 

分享到:
评论

相关推荐

    Ruby语言教程知识点详解 ruby重点知识点总结掌握.docx

    Ruby语言教程知识点详解重点总结 章节目录 1.Ruby语言简介与安装 2.Ruby基础语法 3.数据类型与变量 4.运算符与表达式 5.控制结构 6.函数与模块 7.类与对象 8.继承与多态 9.异常处理 10.文件与I/O操作 11.Ruby标准库...

    Ruby语言教程.docx

    ### Ruby语言教程知识点详解 ...通过以上介绍的教程资源和学习方法,可以帮助初学者系统地学习Ruby语言,逐步提高自己的编程技能。随着实践经验的积累,开发者将能更好地利用Ruby的强大功能来解决复杂问题。

    Ruby语言教程对Ruby语法的总结展示Ruby语法的基本概念和用法.docx

    ### Ruby语言教程对Ruby语法的总结 #### 一、变量与数据类型 **特点:** - **动态类型:** Ruby是一种动态类型的语言,这意味着你无需为变量声明具体的数据类型。 - **变量命名规则:** 变量名必须以小写字母或...

    Ruby语言简介及相关案例.pdf

    ### Ruby语言简介及相关案例 #### 一、Ruby语言概述 Ruby是一种高级编程语言,由日本人松本行弘(Yukihiro Matsumoto)在1995年开始开发。该语言的设计理念融合了函数式编程与面向对象编程的优点,旨在使程序员...

    Ruby 编程语言的书籍

    ### Ruby编程语言核心知识点解析 #### 一、书籍概述与作者背景 《The Book of Ruby》是由Huzaifa Sidhpurwala与Huw ...通过系统学习本书中的内容,你将能够更加熟练地运用Ruby进行高效、优雅的软件开发。

    RUBY语言入门教程

    以上是对“RUBY语言入门教程”知识点的概述,涵盖了RUBY语言的基础概念、核心特性和高级应用,旨在帮助初学者快速掌握这门语言,并为后续深入学习打下坚实基础。希望这份详尽的知识点总结能对你有所帮助!

    Ruby语言入门教程v1

    本入门教程“Ruby语言入门教程v1”旨在帮助初学者快速掌握Ruby的基础知识和核心概念,以便能轻松地进行编程。 Ruby的起源: Ruby由日本人松本行弘在1995年创造,其设计目标是强调程序员的生产力和代码的可读性。它...

    Ruby语言基础语法教程

    ### Ruby语言基础语法教程知识点详解 #### 一、Ruby简介 - **定义**:Ruby是一种简单而强大的面向对象编程语言,由日本人松本行弘(Yukihiro Matsumoto)于1995年设计并发布。 - **特点**: - 简洁性:Ruby的设计...

    Ruby/tk学习资料

    Ruby/tk是一种基于Ruby语言的图形用户界面(GUI)库,它基于Tcl/Tk工具包并进行了封装以适应Ruby的语法和习惯。 #### 1. 引入Ruby/tk 在使用Ruby/tk之前,首先需要确保已经正确安装了Ruby环境,并且安装了Ruby/tk库...

    Ruby自学笔记

    以上是Ruby自学笔记中提及的关键知识点的详细解读,如果要学好Ruby语言,深入理解这些基础知识是非常必要的。Ruby语言的这些特性与规则构成了其独特的编程范式,使得它在动态语言领域中占有一席之地。

    基于Ruby语言的Ruby on Rails项目及其代码方案

    ### 基于Ruby语言的Ruby on Rails项目及其代码方案 #### 一、项目概述 本项目基于Ruby语言,利用Ruby on Rails(简称Rails)框架构建。Ruby on Rails是一款使用Ruby语言开发的应用程序框架,其核心是MVC(Model-...

    Ruby语言教程及案例.docx

    ### Ruby语言教程及案例知识点详解 #### 一、Ruby简介 **Ruby** 是一种简洁而强大的面向对象编程语言,以其清晰的语法和丰富的内置功能著称。它支持多种编程范式,包括面向对象编程(OOP)、命令式编程以及函数式...

    Ruby 教程 The Book of Ruby

    本书面向希望学习Ruby语言的初学者以及已经有一定编程基础但想深入了解Ruby特性的开发者。 - **风格**:本书采用实战导向的方式进行讲解,旨在通过实践让读者掌握Ruby的核心概念和技术。 - **目标读者**:适合对Ruby...

    Ruby入门教程:只需20分钟,你将了解到ruby语言的基础知识

    - **Ruby语言**: Ruby是一种简单快捷的面向对象编程语言,适用于快速开发应用程序。 - **安装前提**: 本教程假设读者已经安装了Ruby环境。若未安装,请访问Ruby官方网站下载并安装。 #### 二、交互式Ruby (IRB) - ...

    Ruby语言教程-一门高级的面向对象编程语言,它被设计用于简单和快速的编程 Ruby的语法简洁而优雅,它可以用于Web开发、

    ### Ruby语言概述与特点 #### 一、简介 Ruby是一种高级、面向对象的编程语言,以其简洁优雅的语法和高效灵活的特点,在众多编程语言中独树一帜。它由日本人松本行弘(Matz)于1995年创建,并迅速在全球范围内获得...

    以下是一个非常详细的Ruby语言教程.docx

    通过学习这些内容,你可以掌握 Ruby 的基本语法和面向对象编程的核心概念,并能进行简单的 Web 应用开发。在实际应用中,建议多加练习,编写实际的小程序来加深理解和记忆。如有疑问或需要更深入的解释,欢迎随时...

    Programming Ruby - The Pragmatic Programmer's Guide, 2nd Edition (2005) [annotated]

    该书不仅覆盖了Ruby语言的基础知识,还探讨了其高级特性与应用实践,被誉为学习Ruby的必读之作。 ### 关于Ruby Ruby是一种简洁、优雅且功能强大的编程语言,由日本人松本行弘(Yukihiro Matsumoto)于1995年设计并...

    Ruby 语法. Ruby 是一种开源的面向对象程序设计的服务器端脚本语言

    通过以上内容的学习,我们对 Ruby 语言有了全面的了解。Ruby 以其简洁优雅的语法、强大的面向对象能力、丰富的标准库和活跃的社区支持,成为了 Web 开发和其他领域的重要选择之一。无论是初学者还是有经验的开发者,...

Global site tag (gtag.js) - Google Analytics