如何使用元编程将Ruby中的冗长代码更改为更简单的代码?
据说Ruby是一种元编程语言。我想知道是否可以使用元编程来减少前3行的冗长如何使用元编程将Ruby中的冗长代码更改为更简单的代码?,ruby,metaprogramming,Ruby,Metaprogramming,据说Ruby是一种元编程语言。我想知道是否可以使用元编程来减少前3行的冗长 RUBY_VERSION ||= "unknown version" RUBY_PATCHLEVEL ||= "unknown patchlevel" RUBY_PLATFORM ||= "unknown platform" print "Ruby ", RUBY_VERSION, " patch ", RUBY_PATCHLEVEL, " on ", RUBY_PLATFORM 这就是工作: %w{version
RUBY_VERSION ||= "unknown version"
RUBY_PATCHLEVEL ||= "unknown patchlevel"
RUBY_PLATFORM ||= "unknown platform"
print "Ruby ", RUBY_VERSION, " patch ", RUBY_PATCHLEVEL, " on ", RUBY_PLATFORM
这就是工作:
%w{version patchlevel platform}.each{|v| eval "RUBY_#{v.upcase} ||= 'unknown #{v}'"}
但我认为这是不透明和令人不快的。我觉得你原来的版本好多了。特别是,我认为带常量的
| |=
并不好(因为常量不应该是动态的),而且带常量的eval
不是标准的,因此也不是预期的。在我看来,将条件赋值、常量和求值放在一起会造成一个糟糕的组合。我认为不应该更改常量的值。相反,请尝试以下方法:
puts "Ruby #{RUBY_VERSION || 'unknown version'}" # ...
另外,使用Rails goodies,您可以通过调用
"RUBY_#{v}".constantize
而不是脏的
eval
;-) +1用于解释。我认为原版也更好。