`
RednaxelaFX
  • 浏览: 3049662 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

Ruby方法名简写的trick……(外加方法名缩写的trick)

    博客分类:
  • Ruby
阅读更多
刚才跟NS老兄聊的时候他给我看了段代码:
night_stalker 写道
看到一个方法简写 trick
irb(main):004:0> "Hello World".spl
=> ["Hello", "World"]
irb(main):005:0> "Hi there Daniel".sp
=> ["Hi", "there", "Daniel"]
irb(main):006:0> "Hi there Daniel".s
=> "Ambigous abbreviation s ->  select, slice, sub!, squeeze, send, split,
size, strip, succ!, squeeze!, sub, slice!, scan, sort, swapcase, swapcase!,
sum, singleton_methods, succ, sort_by, strip!"


我正无聊,回答说这实现起来不难,就模仿那段代码的行为估摸了一个出来。不过这么简单的东西我一开始居然写错了,郁闷 T T
class Object
  def method_missing(name, *args, &block)
    candidates = methods.grep /^#{name}/
    raise "undefined method `#{name}' for #{self}:#{self.class}" if candidates.empty?
    raise "Ambigous abbreviation #{name} -> #{candidates.join ', '}" unless candidates.one?
    method(candidates.first).call *args
  end
end

一开始忘写method,直接拿candidates.first[*args]就调用了……找起错来还挺麻烦的 T T

另外,还可以尝试匹配下划线分隔的名字中的缩写,像是把end_with?缩写成ew。在Ruby 1.9上可以这样写:
class Object
  def method_missing(name, *args, &block)
    candidates = methods.grep /^#{name}/
    if candidates.empty?
      downcase_name = name.to_s.downcase
      candidates = methods.map{|m| m.downcase}.reject{|m| m[0] != name[0]}.select do |m|
        downcase_name == m.to_s.sub(/[?!=]$/, '').split(/_/).map{|p| p[0]}.join
      end
    end
    raise "undefined method `#{name}' for #{self}:#{self.class}" if candidates.empty?
    raise "Ambigous abbreviation #{name} -> #{candidates.join ', '}" unless candidates.one?
    method(candidates.first).call *args
  end
end

主要是Ruby 1.9之前String#[]返回的是字节的值,是个Fixnum,要转成字符还得用Fixnum#chr,比较烦……要在Ruby 1.8上运行这代码的话,要在[0]后面都加上.chr。

E:\build_area\ruby191\bin>irb
irb(main):001:0> class Object
irb(main):002:1>   def method_missing(name, *args, &block)
irb(main):003:2>     candidates = methods.grep /^#{name}/
irb(main):004:2>     if candidates.empty?
irb(main):005:3>       candidates = methods.select do |m|
irb(main):006:4*         name.to_s.downcase == m.to_s.sub(/[?!=]$/, '').split(/_/).map {|p| p[0]}.join.downcase
irb(main):007:4>       end
irb(main):008:3>     end
irb(main):009:2>     raise "undefined method `#{name}' for #{self}:#{self.class}" if candidates.empty?
irb(main):010:2>     raise "Ambigous abbreviation #{name} -> #{candidates.join ', '}" unless candidates.one?
irb(main):011:2>     method(candidates.first).call *args
irb(main):012:2>   end
irb(main):013:1> end
=> nil
irb(main):014:0> 'alpha'.ew 'a'
=> true
irb(main):015:0> 'alpha'.end_with? 'a'
=> true


结束语:人不能太无聊了 XDD
分享到:
评论
4 楼 RednaxelaFX 2009-04-25  
night_stalker 写道
着色那个最好加上
require 'win32/Console/ANSI'

不过 tab 后一些字符会删不掉 -_-

对高亮没啥追求,能tab就行……
require 'irb/completion'之后,打了3.然后按tab,出来一长串列表……不停按回车然后总是错过后面再出来的3. T T

昨晚想说的忘说了。根据方法名的每个单词开头字母组成的缩写来搜索这个,不是我突然想到的,而是最近Visual Studio 2010和MonoDevelop 2.0都宣传它们实现了类似的搜索符号的功能,深深的印在了我的娱乐列表上……
3 楼 night_stalker 2009-04-25  
着色那个最好加上
require 'win32/Console/ANSI'

不过 tab 后一些字符会删不掉 -_-
2 楼 RednaxelaFX 2009-04-25  
Hooopo 写道
继中文编程之后,又一娱乐实践。。。

跟NS老兄聊天就总是能找到乐子,呵呵~

不过说真的,在Windows上用默认配置的、裸的irb难道你们不会觉得不爽么?如果能用缩写来打方法名有时候不会很爽么……
至少把这个配置给弄上,不然太落伍了 XDD
要是不在Windows上的话,还有些古老的办法可以让irb“亮”起来……
1 楼 Hooopo 2009-04-25  
继中文编程之后,又一娱乐实践。。。

相关推荐

    Trick

    "Trick"这一主题似乎与一套特别的字体资源相关,其中包括多种不同风格的图像文件(.gif)和TrueType字体文件(.TTF)。让我们深入探讨一下这个话题。 首先,.gif 文件是一种常见的图像格式,支持透明度和动画,常...

    Hattrick球场上座率概算

    Hattrick球场上座率概算 Hattrick球场上座率概算

    重修 Slope Trick(看这篇绝对够!).doc

    这一点对于Slope Trick的应用至关重要,因为它提供了处理动态规划过程中状态转移的有效方法。 #### 五、Slope Trick 的核心思想 Slope Trick 的核心在于通过维护函数的转折点来更新状态,关键步骤包括: 1. **定义...

    The Kernel Trick.pdf

    在机器学习中,核技巧(Kernel Trick)是一种非常重要的技术,它允许我们在高维特征空间中有效地进行线性学习算法的操作,而无需显式地计算出高维空间的数据表示。核技巧在诸如支持向量机(SVM)等算法中发挥了重要...

    arp_trick.tar.gz

    在ARP_trick.tar.gz这个压缩包中,我们可以预期包含有关如何执行和防御ARP欺骗的相关资料。可能包括了以下内容: 1. **ARP协议原理**:首先,理解ARP的工作机制至关重要。当主机需要发送数据到某个IP地址时,它会...

    python-trick

    Python-trick,上传的事pdf文档

    trick_bag:各种Ruby类和方法来简化和增强您的代码

    特技袋各种Ruby类,模块和方法,以简化和增强您的代码。安装将此行添加到您的应用程序的Gemfile中: gem 'trick_bag'然后执行: $ bundle或将其自己安装为: $ gem install trick_bag用法理解用法的最佳方法是查看a...

    Hat_Trick_The Catch Game.unitypackage

    Hat Trick是Unity官方商店提供的5.5.0版本以上的一款游戏Demo。

    神经网络训练Trick 训练技巧.docx

    ### 神经网络训练Trick详解 #### 引言 神经网络训练是深度学习领域的一个核心环节,其效果的好坏直接影响着模型的性能。在实际应用中,开发者经常会遇到模型训练不佳的情况,这时就需要一系列的技巧(Tricks)来...

    trick:特技模拟环境。 Trick提供了一组通用的仿真功能和实用程序,可以自动构建仿真

    由NASA约翰逊航天中心开发的Trick仿真环境是一个功能强大的仿真开发框架,使用户能够为航天器开发的所有阶段构建应用程序。 特里克(Trick)加快了仿真的创建过程,以进行早期飞行器设计,性能评估,飞行软件开发,...

    linux shell trick

    Linux Shell技巧是Linux系统操作中的重要组成部分,它是一种命令行接口,允许用户通过文本命令与操作系统进行交互。Shell脚本可以极大地提高效率,自动化日常任务,并且是系统管理员的得力工具。...

    vdr-hattrick-开源

    VDR-Hattrick是一款专为视频磁盘录像机(Video Disk Recorder, VDR)设计的开源插件。这款插件的出现,旨在为VDR用户提供一个独特的体验,即在观看电视节目的同时,能够实时查看在线足球游戏“Hattrick”的比赛情况...

    支持向量机之Kernel Trick.pdf

    "支持向量机之Kernel Trick.pdf" 支持向量机(SVM)是一种常用的机器学习算法,特别是在分类和回归问题中。然而,在解决线性不可分问题时,SVM 需要使用 Kernel Trick。Kernel Trick 是一种将输入空间映射到高维...

    Hattrick Economy-开源

    今天我们将深入探讨一款名为“Hattrick Economy”(简称haec)的开源工具,它专为分析和预测在线足球经理游戏——Hattrick的经济数据而设计。 Hattrick是一款深受全球玩家喜爱的在线模拟经营游戏,玩家在游戏中扮演...

    list_sticky_scroll_trick

    在Android开发中,"list_sticky_scroll_trick"是一个常见的UI设计技巧,它涉及到ListView的优化和用户体验提升。这个效果通常被称作“吸顶”或者“固定头部”效果,即当用户滚动列表时,某些特定的视图(如标题或...

    Hattrick Ranking-开源

    Hattrick Ranking,一款专为在线游戏Hattrick设计的CHPP(Hattrick个人程序插件)批准的应用程序,为玩家提供了一个独特的功能,即创建自定义的排名系统,以更深入地对比和分析Hattrick中的各支球队。这款开源软件的...

    trick-plugin:将Trick整合到Jenkins中

    dev分支是Trick插件的主要开发分支。 从dev克隆以创建功能/主题分支是首选方法。 为插件做贡献 插件源代码托管在。 新功能建议和错误修复应作为提交。 在GitHub上克隆存储库,准备对本地存储库的更改,然后提交拉取...

    db_trick.sql

    db_trick.sql

    [ A trick for forms ] Variation-精品源代码

    这个压缩包包含一个名为"code.txt"的文件,很可能是用某种编程语言编写的源代码,可能涉及到表单验证、数据处理、用户界面优化等方面的知识。 表单处理在Web开发中扮演着核心角色,尤其是在HTML和JavaScript中。...

Global site tag (gtag.js) - Google Analytics