RUBY_PLATFORM
で Ruby が動作しているプラットフォームがわかります。
Windowsは x64-mingw32
とかになります。windows
ではありません。
Visual Studio とかでビルドすると mswin
が入るようです。(環境がないのでフルネームはわかりません...)
なので、これらの文字列が RUBY_PLATFORM
に含まれているかどうかを確認することで Windwos
で動作しているかが判定できます。
def bar(msg) puts "#{__callee__} #{msg}" end 3.times do |i| if RUBY_PLATFORM =~ /mingw|mswin/ bar("win: #{i}") else bar("other: #{i}") end end
何回も呼ぶようなメソッドを包含するような場合だと、定義ごと分岐したほうがいいかもしれません。
if RUBY_PLATFORM =~ /mingw|mswin/ def foo(i) puts "#{__callee__} win: #{i}" end else def foo(i) puts "#{__callee__} other: #{i}" end end 3.times do |i| foo(i) end
複数のメソッドを定義しないといけない場合は上記の場合だと煩雑になるかもしれません。その場合は require を分岐させる方法がいいかもしれません。
if RUBY_PLATFORM =~ /mingw|mswin/ require File.join(__dir__, "method_win.rb" else require File.join(__dir__, "method.rb" end 3.times do |i| method(i) end