ruby:借助第三方类名如何查找第三方gem名称(zlib为例)
rubygem中含有成千上万的第三方gem,网上书上扩展教程中都有指导如何使用第三方gem的例子。但是如果不幸这些例子都没有提及gem名称的话,如何只凭第三方类名或require名查找gem名称呢?换句话说,我怎么知道要intall神马gem呢?
举个例子来看《ruby之道》p60页有一个使用字符串压缩功能的第三方类,书上例子中有如下代码:
require ‘zlib’ include Zlib
真难为人啊!?我用gem search zlib -r搜索的结果如下:
apple@kissAir: ~$gem search zlib -r
*** REMOTE GEMS ***
ffi-zlib (0.2.0)
pr-zlib (1.0.0)
rubysl-zlib (2.0.1)
sprout-fzlib-library (1.0.0)
zlib-crc32_combine (1.0.2)
zlib-socs (0.1)
Zliby (0.0.5)
zliby (0.0.5)
到底应该用哪个呢?这个真不好说,那么到http://ruby-doc.com/gems去看看吧!我们当然选择Z开头的gem,找到Zliby比较像,进去看看,发现含有Zlib模块,我才zliby和Zliby是一码事(他们版本号都一样哎)我们就用zliby啦:
gem install zliby -r
很快gem安装完毕,下面上测试代码:
#!/usr/bin/ruby require 'zlib' include Zlib str = ("aa0".."zz9").to_a.join*1000 puts "str.size is #{str.size}" class Deflate class << self alias old_deflate deflate def deflate(str,level=DEFAULT_COMPRESSION) t = Time.now s=old_deflate(str,level) puts "#{__callee__} takes #{Time.now - t}s" s end end end #压缩 s1 = Deflate.deflate(str,BEST_SPEED) s2 = Deflate.deflate(str) s3 = Deflate.deflate(str,BEST_COMPRESSION) puts "s1.size:#{s1.size} s2.size:#{s2.size} s3.size:#{s3.size}" #解压缩 us = Inflate.inflate(s3) puts "us.size is #{us.size}" puts "#{us == str}"
为了计算deflate方法运行时间,我重写了该方法,并在其中调用原来的方法。最后是运行结果:
apple@kissAir: ruby_src$./dzh.rb
str.size is 20280000
deflate takes 0.075283s
deflate takes 0.154147s
deflate takes 0.166407s
s1.size:276965 s2.size:160761 s3.size:160761
us.size is 20280000
true
ruby:借助第三方类名如何查找第三方gem名称(zlib为例)的更多相关文章
- 整理Ruby相关的各种概念(rvm, gem, bundle, rake, rails等)
转自:http://henter.me/post/ruby-rvm-gem-rake-bundle-rails.html Ruby 这个就不用多说了 RVM 用于帮你安装Ruby环境,帮你管理多个Ru ...
- webpack指定第三方模块的查找路径
通常我们会使用一些地方模块在我们的项目中,比如bootstrap import 'bootstrap' 导入的bootstrap默认会查找当前目录的node_modules文件,但是如果这个文件没有, ...
- CMake查找第三方库路径
问题 一直都有一个问题,就是基于Windows下使用CMake构建VS工程时,CMake是如何查找到第三方库所在的路径的呢? 答案 今天重新想起这个问题,就拿构建Vtk的VS工程测试了一下, 才发现是 ...
- 查找第三方银行官方app下载链接探索过程
需求:最近有个需求,点击按钮,弹出一个所需银行选项的非全屏弹出层,再点击某银行选项,随即跳转到该银行的app下载界面,如下图所示 注:这里只是引用相关银行的链接,不需要做什么逻辑处 ...
- 解决ruby安装后无法添加淘宝gem源------------学习记录
使用sass ,需要安装ruby,会建议移除gem源,添加淘宝的gem源,但是淘宝的镜像源已经停止维护啦!!用https://gems.ruby-china.com 代替即可. 操作如下: 1)删除原 ...
- Unity 下集成第三方原生 SDK,以极光厂商通道为例
Unity中集成三方SDK有两种方式: Unity 项目开发中时常有集成 Android 第三方 SDK 的需求,比如接入第三方推送,分享等功能.而第三方 SDK 的集成文档提到的往往是基于原生 An ...
- 如何在app里利用js调取手机第三方地图--以高德地图和百度地图为例(2)
接着上篇文章说一下js调取第三方地图的问题,上次的方式是通过一个链接直接接到了第三方的web页面,又从第三方的web页面调用的第三方app;结果,这个方法被否定了,因为需求不是这样,需求直接就想调用第 ...
- flutter 引入第三方 Icon 图标(以阿里图标库为例)
在fluttter中引入第三方图标库的具体方法: 1.在阿里图标库选好需要用的图标,添加进购物车将选好的图标打包下载到本地(下载代码),复制iconfont.ttf文件到项目中 2.存放途径:lib/ ...
- 基于MFC的Media Player播放器的制作(2---导入第三方库和介绍第三方库)
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 这一节我们介绍如何导入类库,和介绍类库的一功能和介绍MFC的一些主要的模块部分.下面是如何导入类库.第一步我们选中 Media Playe ...
随机推荐
- Android中Socket通信之TCP与UDP传输原理
一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...
- Android初级教程对大量数据的做分页处理理论知识
有时候要加载的数据上千条时,页面加载数据就会很慢(数据加载也属于耗时操作).因此就要考虑分页甚至分批显示.先介绍一些分页的理论知识.对于具体用在哪里,会在后续博客中更新. 分页信息 1,一共多少条数据 ...
- android问题:Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER
转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/24196143 Installation error: INSTALL_FAILED_C ...
- 8.非关系型数据库(Nosql)之mongodb的应用场景
测试脚本: Mysql测试脚本: [php] view plaincopyprint? 1. <?php 2. header("Content-Type:text/html; ...
- nginx+uwsgi+django 部署原理
python开发群里经常有同学问 nginx+uwsgi+django 着了教程部署,但是不知道他们之间怎么样的关系,于是我就google到了一个让我看起来很认同的图,大家看了也比较认同,于是就分享出 ...
- 老司机带你玩转web service
当大型需求被数个公司分割开来,各公司系统相互交换数据的问题就会接踵而来.毕竟是多家不同的公司的产品,研发开发语言.采用技术框架基本上是百花齐放.怎样让自家系统提供的服务具有跨平台.跨语言.跨各种防火墙 ...
- org.apache.poi.ss.usermodel 类操作excel数据遗漏
直接上图. 错误程序: 循环读取每一行的单元格数据部分 //for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) ...
- 索引构建情况分析、mongoDB安全(四)
索引好处:加快索引相关的查询 坏处:增加磁盘空间消耗,降低写入性能 评判当前索引构建情况: 1. mongostat工具介绍 2. profile集合介绍 3. 日志介绍 ...
- 【翻译】了解Ext JS 5的小部件
原文:Understanding Widgets in Ext JS 5 在Ext JS 5,引入了新的"widgetcolumn",支持在网格的单元格中放置组件.同时,还在Ext ...
- 【一天一道LeetCode】#41. First Missing Positive
一天一道LeetCode系列 (一)题目 Given an unsorted integer array, find the first missing positive integer. For e ...