【问题标题】:In ruby 1.9.3., how can an object created by: object-instance.clone not find a method which the original object could?在 ruby​​ 1.9.3. 中,如何创建对象:object-instance.clone 找不到原始对象可以找到的方法?
【发布时间】:2014-06-05 01:36:19
【问题描述】:

我对 Ruby 比较陌生,但精通许多其他语言。作为我学习 Ruby 的一部分,我引用了由以下人员创建的对象:some_instance.clone。原始对象实例可以找到某个方法OK,但是克隆的对象实例不能。这怎么可能发生?如果副本如此不同以至于无法调用底层基类的方法,那么理解clone 的正确方法是什么?

代码:

  board1 = Board.new(true)
  board1.checkBoardLayout

  board2 = Board.clone
  log.debug("board1 #{board1.object_id}, board2 #{board2.object_id}")
  board2.checkBoardLayout

checkBoardLayout 的第一次调用成功;第二个失败了

# 未定义的方法`checkBoardLayout'

我的理解有哪些不足; clone 的行为与原来的相似,这不是一个有效的期望吗?如果是这样,发生了什么:为什么它不起作用?如果不是,那么在什么意义上它可以是任何一种克隆? dup 也好不到哪里去。我的 Ruby 损坏了吗?

【问题讨论】:

    标签: ruby clone


    【解决方案1】:

    Board.clone 克隆类,而不是实例。因此错误是正确的,因为您尝试将checkBoardLayout 发送到一个类而不是该类的实例。

    你想尝试的是:

    board2 = board1.clone
    

    board2 = Board.new(true).clone
    

    顺便说一句。 Ruby 中的最佳做法是不要在方法名称中使用蛇形大小写,请改用下划线:check_board_layout

    【讨论】:

      猜你喜欢
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 2020-01-06
      • 1970-01-01
      • 2018-09-20
      • 2018-04-10
      相关资源
      最近更新 更多