Geo*_*Geo 3 ruby metaprogramming
小片1:
module A
def cm(m,ret)
class_eval do
define_method(m.to_sym) do
return ret
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
和代码段2:
module B
def cm(m,ret)
class_eval do
"def #{m} #{ret} end"
end
end
end
Run Code Online (Sandbox Code Playgroud)
这些模块中定义的方法将用于在类上创建返回特定值的方法.这是一个例子:
class Whatever
extend A
cm("two",2)
end
Run Code Online (Sandbox Code Playgroud)
这将创建一个名为2的方法,它将返回2.事情是,第二个代码段中的代码不起作用.有什么想法吗?我想class_eval可以拿一根绳子.
class_eval 将字符串作为参数,但是您已将字符串传递给块中的函数.
试试这个:
module B
def cm(m,ret)
class_eval("def #{m}() #{ret} end")
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |