加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby中的字符串文字如何绕过new / initialize,有没有办法对此进

发布时间:2020-12-16 19:03:48 所属栏目:百科 来源:网络整理
导读:今天下午我正在玩一个想法,偶然发现了一些我不太懂的东西.基本上我在这个实验中想要实现的是以某种方式知道每次创建字符串(以供以后使用,例如在某种DSL中).以下适用于通过String.new创建的任何String: class ::String class self alias_method :new_orig,:n
今天下午我正在玩一个想法,偶然发现了一些我不太懂的东西.基本上我在这个实验中想要实现的是以某种方式知道每次创建字符串(以供以后使用,例如在某种DSL中).以下适用于通过String.new创建的任何String:
class ::String
  class << self
    alias_method :new_orig,:new
    def new(*args)
      o = new_orig(*args)
      puts "newing '#{o}'"
      o
    end
  end
  alias_method :initialize_orig,:initialize
  def initialize(*args)
    initialize_orig(*args)
    puts "initializing '#{self}'"
  end
end

例如

irb > String.new("foo")
initializing 'foo'
newing 'foo'
 => "foo"

我无法弄清楚当你使用文字时如何创建一个String对象.例如,为什么不进行相同的初始化和设置:

irb > "literal string"
 => "literal string"

我意识到当字符串是文字时,编译器正在做某事或其他不同的事情,但它不需要初始化,只是为了成为一个功能齐全的对象?是否有任何技巧可以用来确定何时使用文字创建字符串,或者这是不可能做到的?

谢谢!

解决方法

我认为,从接下来的讨论开始,除非Chris Heald醒来并实际查看他承诺的源代码,否则几乎没有人会给你真正的回答.但是,正如你在对你的问题的评论中所说的那样,目的是“测试语言可以做些什么来获得一些乐趣并学习新的东西”,那么让我向你介绍 – 就像我讨厌SlideShare一样 – 来 this Ruby presentation by famous esoteric programmer Yusuke Endoh.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读