Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

メタプログラミングRuby | 魔術 | 配列引数

概要

配列引数

内容

配列引数は任意の数の引数を配列として受け取ることができます。
この機能は、可変長・位置可変等様々な条件の引数をとるような
DSLの実装に役立ちます。

サンプル仕様

Ruby,Java,JavaScriptに対応した文字列出力機能。
構文はmulti_lang_printに任意の数の引数を渡すこと。
引数がシンボルなら言語指定。
文字列なら出力内容指定とする。
デフォルトはRubyで出力する。

サンプルコード

# encoding: utf-8
require "pp"

def multi_lang_print(*commands)
  lang = :ruby
  output = ""
  commands.each do |c|
    if c.class == Symbol
      lang = c
    else
      case lang
      when :ruby
        output << "puts \"#{c}\""
      when :java
        output << "System.out.println(\"#{c}\");"
      when :js
        output << "console.log(\"#{c}\");"
      end
      output << "\n"
    end
  end
  return output
end

puts multi_lang_print "default-hoge", :java, "java-hage", "java-hige", "java-hoge", :js, "js-hoge", :ruby, "ruby-hoge"

出力

puts "default-hoge"
System.out.println("java-hage");
System.out.println("java-hige");
System.out.println("java-hoge");
console.log("js-hoge");
puts "ruby-hoge"