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

如何使用元编程将Ruby中冗长的代码转换为更简单的代码?

  •  0
  • nonopolarity  · 技术社区  · 14 年前

    据说Ruby是一种元编程语言。我想知道前3行是否可以使用元编程来减少冗长?

    RUBY_VERSION ||= "unknown version"
    RUBY_PATCHLEVEL ||= "unknown patchlevel"
    RUBY_PLATFORM ||= "unknown platform"
    
    print "Ruby ", RUBY_VERSION, " patch ", RUBY_PATCHLEVEL, " on ", RUBY_PLATFORM
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   Peter    14 年前

    这就是工作:

    %w{version patchlevel platform}.each{|v| eval "RUBY_#{v.upcase} ||= 'unknown #{v}'"}
    

    但我认为这是不透明的和令人不快的。我觉得你原来的版本好多了。尤其是,我认为 ||= eval

        2
  •  0
  •   samuil    14 年前

    我认为你不应该改变常数的值。请尝试以下方法:

    puts "Ruby #{RUBY_VERSION || 'unknown version'}" # ...
    

    另外,使用Rails goodies,您可以通过调用

    "RUBY_#{v}".constantize
    

    而不是肮脏 eval