No entiendo muy bien su pregunta. Parece que estás mezclando dos niveles de abstracción completamente diferentes: Ruby es un lenguaje de programación, JRuby es un compilador del lenguaje de programación Ruby. La pregunta de si su programa se está ejecutando en Ruby o en JRuby simplemente no tiene sentido: cuando se está ejecutando en JRuby, es es que se ejecuta en Ruby, porque JRuby es una implementación de Ruby.
Es lo mismo que preguntar "¿cómo puedo saber si estoy conduciendo un Ford o un automóvil?"
Si desea saber en qué implementación de Ruby se está ejecutando, puede verificar la constante global RUBY_ENGINE
. Se supone para identificar de forma única y universalmente el motor está ejecutando en adelante, aunque por desgracia no por tres razones:
- en algunos motores, que no lo hace lo que el motor se está ejecutando en cuentan, por ejemplo, en YARV esperaría que
RUBY_ENGINE
fuera 'yarv'
, pero en realidad es 'ruby'
. Por lo tanto, falla en la parte "identificar".
- aún peor: en la RM, es también
'ruby'
, lo que significa que no sólo no le diga qué motor se están ejecutando en, pero también totalmente diferentes motores que devuelven el mismo valor . IOW, también falla en la parte "única".
- y por último pero no menos importante,
RUBY_ENGINE
es bastante nuevo, por lo que aún no es compatible con todos los motores, lo que significa que falla en la parte "universal".
Sin embargo, para sus propósitos algo así como
if defined? RUBY_ENGINE && RUBY_ENGINE == 'jruby'
debería funcionar bien.
Sí. Es "java" bajo JRuby y el sistema operativo subyacente en otro lugar. – Chuck
De hecho. Suficientemente bueno para mi. ¡Muchas gracias! – pastorius
@Chuck: gracias por verificar. No tenía una instalación JRuby a mano. – JesperE