- 浏览: 335120 次
- 性别:
- 来自: 北京
文章分类
最新评论
对alias还不太熟悉,看到下面的代码有点晕了..
迷惑1:alias talkee talk是把Adapter#talk还是Adaptee#talk拷贝一份并起个新名字talkee呢?
迷惑2:alias talkee talk的位置,放在下面会如何呢?
迷惑3:怎么感觉这个程序会无限递归呢(实际没有..)
都说*nix下有事找男人(man),学ruby有事没事日(ri)一下...
这个例子更让人迷惑..本来有继承关系的时候就迷糊了,现在这个例子又多出来一个exit(Kernel下定义的方法)
于是只好自己简化一些:
结论1:alias和位置有关要alias的方法必须之前有定义..
继续折腾:
结论:alias 会沿着继承链(父类,Mix-in,Kernel,Object,Top Level等)查找方法直到找不到方法时抛出No Method Error异常。(上面只举了一个Top Level的例子,其他情况类似)
最后自己hack了一下alias_method:
PS:感觉最开始的代码用super比较不错..
step1 : 桌面上有个叫 a 的文件夹
step2 : 我复制a并粘帖,重命名为b
step3 : 在C:\新建一个叫 a 的文件夹.往里面塞进几个自己要的文件
step4 : 把新打包好的压缩文件放到桌面,替换掉原有的a 文件夹
step5 : 把step2复制的 b 文件夹的所有文件再拷贝到 a 文件夹里.
class Adaptee def talk; puts 'Adaptee';end end class Adapter < Adaptee alias talkee talk def talk puts 'before Adaptee' talkee puts 'after Adaptee' end end Adapter.new.talk
迷惑1:alias talkee talk是把Adapter#talk还是Adaptee#talk拷贝一份并起个新名字talkee呢?
迷惑2:alias talkee talk的位置,放在下面会如何呢?
迷惑3:怎么感觉这个程序会无限递归呢(实际没有..)
都说*nix下有事找男人(man),学ruby有事没事日(ri)一下...
---------------------------------------------------- Module#alias_method alias_method(new_name, old_name) => self ------------------------------------------------------------------------ Makes _new_name_ a new copy of the method _old_name_. This can be used to retain access to methods that are overridden. module Mod alias_method :orig_exit, :exit def exit(code=0) puts "Exiting with code #{code}" orig_exit(code) end end include Mod exit(99) _produces:_ Exiting with code 99
这个例子更让人迷惑..本来有继承关系的时候就迷糊了,现在这个例子又多出来一个exit(Kernel下定义的方法)
于是只好自己简化一些:
module TestAlias alias _say say def say puts "Hello" end end include TestAlias _say #undefined method `say' for module `TestAlias' (NameError)
module TestAlias def say puts "Hello" end alias _say say end include TestAlias _say #hello
结论1:alias和位置有关要alias的方法必须之前有定义..
继续折腾:
def say puts "From Top Level" end module TestAlias alias _say say def say puts "Hello" end end include TestAlias _say #From Top Level
结论:alias 会沿着继承链(父类,Mix-in,Kernel,Object,Top Level等)查找方法直到找不到方法时抛出No Method Error异常。(上面只举了一个Top Level的例子,其他情况类似)
最后自己hack了一下alias_method:
class Module alias _alias_method alias_method def alias_method alias_m, m define_method m do self.__send__ m end _alias_method alias_m, m end end class TT #让alias_method放在前面也可以 alias_method :_say, :say def say puts "say" end end TT.new._say #say
PS:感觉最开始的代码用super比较不错..
class Adaptee def talk; puts 'Adaptee';end end class Adapter < Adaptee #alias talkee talk def talk puts 'before Adaptee' super puts 'after Adaptee' end end Adapter.new.talk
评论
4 楼
liusong1111
2009-07-06
3 楼
areha001
2009-07-06
alias b a
step1 : 桌面上有个叫 a 的文件夹
step2 : 我复制a并粘帖,重命名为b
def a dosomething
step3 : 在C:\新建一个叫 a 的文件夹.往里面塞进几个自己要的文件
step4 : 把新打包好的压缩文件放到桌面,替换掉原有的a 文件夹
def a dosomething b end
step5 : 把step2复制的 b 文件夹的所有文件再拷贝到 a 文件夹里.
2 楼
Hooopo
2009-06-27
单纯从用alias避免在方法中调用继承链上与自身同名方法这个场景看,super无疑是最佳替代品。
1.显然这个场景里面super一定可用。
2.用super指定向继承链回溯的层数(好像alias做不到):
1.显然这个场景里面super一定可用。
2.用super指定向继承链回溯的层数(好像alias做不到):
class Object #via:http://www.ruby-forum.com/topic/187339 def super!(n,*args) method=caller[0][%r/.*?`(.*?)'/,1].to_sym klass=self.class.ancestors[n] klass.instance_method(method).bind(self).call(*args) end end class Adaptee def talk; puts 'Level 1';end end def talk puts "Level 2" end class Adapter < Adaptee def talk puts 'before Adaptee' #跳过父类的talk直接调用top leve的talk super! 2 puts 'after Adaptee' end end Adapter.new.talk #before Adaptee #Level 2 #after Adaptee
1 楼
night_stalker
2009-06-27
发表评论
-
新博客
2012-04-23 20:47 1734https://db-china.org -
Ruby Verbose Warning Mode
2011-10-16 14:48 2051Ruby在很多方面是一个更优雅的Perl,从Perl社区继承了 ... -
Pattern Match In Ruby
2011-10-07 01:17 2006最近看了一些Erlang,模式匹配是个好东西,简单的sum函数 ... -
Draper: View Models for Rails
2011-10-07 01:19 2268Draper是一个Ruby gem,它让Rails model ... -
Active Record batch processing in parallel processes
2011-10-07 01:20 2270Active Record 提供 find_each来分批处理 ... -
最轻量级的Ruby后台任务
2011-08-04 16:47 3860普通情况下ruby调用系统命令行的过程是堵塞的,无论是用sys ... -
test
2011-07-15 19:59 0test -
fiber
2011-06-17 09:37 0挖坑,待填。。 1.用到fiber.alive?、fiber ... -
Identity Map in Rails3.1
2011-06-12 18:29 2737Identity Map是Rails3.1的又 ... -
xx00
2011-06-06 03:40 0https://github.com/ngmoco/cache ... -
挖坑1
2011-06-06 02:17 0cache money 源码 替换memcache为redis ... -
websocket demo
2011-06-04 20:44 2054地址:https://github.com/hooopo/we ... -
ruby GC
2011-06-02 04:24 0http://blog.csdn.net/lijun84/a ... -
reduce method missing call stack with dynamic define method
2011-04-22 22:54 1592method_missing是ruby里面一个非常cool的h ... -
Autocompete with Trie
2011-04-09 04:04 1673像微薄里面用户输入一 ... -
用imagemagick和tesseract-ocr破解简单验证码
2011-04-09 01:31 18925工具:imagemagick + tesseract-ocr ... -
OAuth gem for rails,支持豆瓣,新浪微薄,腾讯微博,搜狐微博,网易微博
2011-03-26 03:13 4479地址:https://github.com/hooopo/oa ... -
用jmeter模拟amf请求进行压力测试
2010-12-16 16:56 30221.获取amf二进制包: 在本地建立proxy,端口为888 ... -
Memoization in Ruby
2010-11-14 11:42 1210这里的Memoization就是将ruby的方法或lambda ... -
整理了一下2008-2010的RubyHeroes博客列表
2010-10-07 02:26 2827Bryan Helmkamp(webrat作者)https:/ ...
相关推荐
《教养的迷思》读后感.pdf
人工智能(AI)作为一门划时代的伟大技术,在教育领域的应用和发展,往往会伴随着教育迷思的出现。这些迷思主要源于人们对AI技术的过高期望、缺乏科学认识、以及AI与教育结合的不确定性。文章中提到了几个关键点,...
为了破解这些迷思,麦肯锡等专业机构提出了“八大关键战略举措”,包括同客户经营、规模化精准营销、产品定制、整合客户旅程、数据洞见共享、一体化团队协同、生态场景共创等。通过这些举措的实施,可以全面推动银保...
科技品牌十大迷思
本文以小学数学微课程为研究对象,探讨了在线教学模式下如何通过发现学生的“迷思”、“错误”和“问题”来激发学生的深度学习,并以此为起点开发出有效的教学策略。 在微课程设计中,首先需要理解深度学习的概念和...
“七式团队迷思”是一个由心理学家欧文·珍尼斯提出的概念。这个概念描述的是一个团队陷入迷思的情况,从而导致团队作出一些劣质的决策。这种现象在团队管理中是非常普遍的,也是团队领导者需要特别注意的问题。 ...
麦肯锡:破解迷思,探索高质量银保发展新模式(2021).pdf
《自我解释策略对转变学生化学平衡迷思概念的研究》这篇硕士专业学位论文主要探讨了如何通过自我解释策略来改变学生在化学平衡领域的错误认知,即迷思概念。论文作者为刘瑞东,由陈康叔和黄燕宁两位导师指导,属于...
### 破除迷思:SOC中的AI 在当今高度数字化的世界中,网络安全已经成为企业和组织不可忽视的关键领域。随着威胁的不断演变和技术的进步,安全运营中心(SOC)面临着前所未有的挑战。本文旨在深入探讨SOC中引入人工...
网络安全五大迷思.pdf
六标准差之迷思.pptx
《CEO的四大迷思》是一本探讨领导艺术的著作,由美国管理顾问帕特里克·兰西奥尼撰写。兰西奥尼以其在管理咨询领域的丰富经验,揭示了CEO们常常陷入的四个主要误区,并提出了如何构建和维持一个健全组织的见解。以下...
迷思概念(misconception)则是指学生对于某一学科或知识点持有的错误或不完整理解。教育数据挖掘技术可以用于发现和纠正学生的迷思概念,从而优化教学策略和学习体验。 在讨论的文档中,提到了迷思概念数据挖掘...
### 破解青春期的迷思 青春期是一个充满变化与挑战的生命阶段,它不仅对青少年自身,也对周围的成人提出了考验。本文旨在澄清并解答围绕青春期的一些常见误解,帮助青少年及其监护人更好地理解和应对这一时期的种种...
传统职业经理人的迷思.doc
揭开FMCG客户的顾客关系管理迷思
在探讨人工智能时代的迷思时,我们不可避免地会接触到两个核心议题:技术恐惧与技术拜物教。这两个概念不仅涉及人工智能技术本身的发展,也与社会、文化和伦理等因素紧密相关。以下将详细阐述这两个概念的内涵、成因...
然而,在地理教学中,由于地理知识的抽象性和综合性,学生极易产生迷思概念,这些错误的认知理解会严重阻碍深度学习的进程。 迷思概念,又称为前科学概念或错误概念,是指学生在学习过程中形成的、与科学概念不一致...
在日化行业,企业经理人面临的管理挑战与各种迷思密切相关。这些迷思不仅影响了组织的效能,也限制了企业的发展。以下是四个主要的管理迷思及其详细分析: 一、局限思考 企业经理人常常陷入各自职责的局限中,只...
【汽车行业经理人迷思】指的是在汽车行业中,经理人们经常陷入一些思维误区,这些误区可能导致组织效率低下,甚至企业衰败。以下是对这些迷思的详细解析: 1. 局限思考:经理人往往过于专注于自己的职责范围,而...