代码之家  ›  专栏  ›  技术社区  ›  eric2323223

替换“=”的ruby方法

  •  0
  • eric2323223  · 技术社区  · 15 年前

    cat_that_has_name("Kelly").as(:kelly)
    kelly.do_something
    

    这里的“as”方法用于生成引用我的cat的方法“kelly”。有人能帮我吗?

    require "test/unit"
    
    class AsTest < Test::Unit::TestCase
      def setup
        @cats = ["Kelly", "Tommy"]
      end
    
      def teardown
      end
    
      def test_as
        kelly1 =  get_cat("Kelly")
        get_cat("Kelly").as(:kelly2)
        assert_equal(kelly1.object_id, kelly2.object_id)
      end
    
      private
      def get_cat(name)
        @cats.each do |cat|
          if cat.to_s==name
            return cat
          end
        end
        return nil
      end
    end
    
    1 回复  |  直到 15 年前
        1
  •  3
  •   Jörg W Mittag    15 年前

    cat_that_has_name so_something 方法)。您还需要发布一个完整的规格说明,确切地说,您所期望的 as 方法,使用示例,理想情况下还可以使用testsuite。毕竟,如果你没有定义“正确”的含义,我们怎么知道我们的答案是否正确?

    我能从你的神秘问题中解读的最好的东西是这样的:

    class Object
      def as(name)
        s = self
        Object.send(:define_method, name) { s }
        Object.send(:private, name)
      end
    end
    

    NoMethodError 对于 有名字的猫 命名者 所以我想说点什么 .

    = (即创建变量)但在你的问题中,你谈论的是创建 方法 def =

    推荐文章