我想因特殊原因消除“=”符号。它可能看起来像这样:
cat_that_has_name("Kelly").as(:kelly)
kelly.do_something
此处的“as”方法用于生成引用我的猫的方法“kelly”。任何人都可以帮我这个吗?
任何建议都将受到赞赏。
更新
Jorg是对的,我添加了一个简单的测试来证明我的意图:
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
答案 0 :(得分:3)
很难弄清楚你真正想要的是什么。如果您需要一些合理的答案,则必须提供您想要实现的完整代码示例(例如,您发布的代码缺少cat_that_has_name
和so_something
方法的定义。您还需要发布一个完整的规范,说明您希望as
方法做什么,使用示例,最好还有测试套件。毕竟,如果你没有定义“正确”的含义,我们怎么知道我们的答案是否正确?
我能从你神秘的问题中解读的最好的东西是这样的:
class Object
def as(name)
s = self
Object.send(:define_method, name) { s }
Object.send(:private, name)
end
end
但是无法知道这是否有效,因为如果我尝试运行您的代码示例,我会NoMethodError
获得cat_that_has_name
而NoMethodError
获得so_something
}。
另请注意,您的问题是自我不一致的:在您的主题行中,您询问有关替换=
的方法(即创建变量),但在您的问题中,您谈到了创建方法 ,这意味着您正在寻找def
而不是=
的替代品。同样,如果有一个测试套件,那么更容易正确回答。