Gem 怎么自己写一个 gem,给 String 类添加自定义实例方法 my_reverse?

rubysir · 2016年01月20日 · 最后由 zlx_star 回复于 2016年01月23日 · 3076 次阅读

class String def my_reverse self.reverse #该方法没有实际意义,只是为了说明问题 end end

我的问题是,怎么把上述方法包装成一个 gem,例如名字叫:myreverse 将来用的时候,安装一下这个 gem,然后 requrie 'myreverse',这样任何一个 String 对象就都有了 my_reverse() 方法。

看了自定义 gem 的知识,示例可以生成一个 gem,定义一个新模块。但我一知半解,就是不知道怎么给 String 添加一个方法? 请各位指点!

找个简单点的 Gem 看它怎么做的

我找了很久,好像没有详细说明 Gem 怎么写的文档

把你的代码扔到 mygem/lib/mygem.rb. 改下 mygem.gemspec 的 todo rake build 安装 pkg 目录的 mygem-*.gem require 'mygem'

就可以调用了。

如果是问如何添加方法,你的示例不就已经给 String 添加了 my_revese 方法吗?

参照例子,将 lib/mygem.rb 文件修改为: require "mygem/version"

module Mygem class String def my_reverse self.reverse end end end 如上代码构建 gem 后安装,测试不可以!

6 楼 已删除

代码一贴问题就出来了,作用域没搞明白,这相当于定义了 Mygem:: String, 不是打补丁的,显然达不到你效果的。

如果只是测试的话,把 module 去掉就可以达到效果了。还是写详细下,3 楼@chenjau 其实告诉你答案了你没懂。如下

require "mygem/version"

class String
  def my_reverse
    reverse   # 去掉 self, 与问题无关, 只是编码规范(https://github.com/bbatsov/ruby-style-guide#no-self-unless-required)
  end
end

#7 楼 @flingfox63 非常感谢!好了!当初以为最外层的 module 不能删除掉。

#8 楼 @rubysir 你需要再了解下 require 的, requrie 'myreverse' 这个 myreverse 其实是 myreverse.rb, 是文件名,跟这个文件里什么内容一点关系也没有。

#9 楼 @flingfox63 是的,我确实对 require 一知半解!看来学习 ruby 也如同学习其他语言一样,开始依葫芦画瓢,了解了些东西,似乎挺好挺快;接下来就是在具体使用中,进一步理解。还有就是相关操作系统知识的积累!非常感谢,您确实说到点子上了!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号