Я работал над расположением CSS, записанным кем-то, кто думал, что размер, данный элементу, является size+padding+border как в IE5 и не только поле содержания, как объяснено в официальной спецификации. Это было записано только некоторые месяц назад, таким образом, он сделал грязные взломы, чтобы заставить его хорошо выглядеть в IE7. Мне потребовались несколько часов с FireBug для разыскивания источника проблемы и к тому времени, когда я понял это, я действительно раздражался.
при открытии сайта с "плавающим" CSS, записанным для IE5 в Firefox, поля просто не имеют достаточного количества пространства, чтобы соответствовать и падать страница. При открытии его в IE7, это выглядит хорошим, поскольку IE7 позволяет границам наложиться так, это выглядит почти корректным. Для кого-то столь же неопытного как я было трудно отметить.
Я думаю, вы можете проверить константу RUBY_PLATFORM.
Я не совсем понимаю ваш вопрос. Кажется, вы смешиваете два совершенно разных уровня абстракции: Ruby - это язык программирования, JRuby - компилятор для языка программирования Ruby. Вопрос о том, работает ли ваша программа на Ruby или просто на JRuby, не имеет смысла: когда она выполняется в JRuby, она выполняется в Ruby, потому что JRuby является реализацией Ruby.
Это то же самое, что спросить: «Как мне узнать, вожу ли я Ford или машину?»
Если вы хотите знать, в какой реализации Ruby вы используете, то можете проверить глобальный RUBY_ENGINE
константа. Предполагается, что он универсально и однозначно идентифицирует двигатель, на котором вы работаете, хотя, к сожалению, он не работает по трем причинам:
RUBY_ENGINE
будет 'yarv'
, но на самом деле это «рубин»
. Таким образом, он терпит неудачу в части "идентификации". «рубиновый»
, что означает, что он не только не сообщает вам, какой у вас двигатель. работает, но также существуют разные двигатели, которые возвращают то же значение. IOW, он также не работает в «уникальной» части. RUBY_ENGINE
довольно новый, поэтому он еще не поддерживается всеми движками, что означает, что он не работает в «универсальном» "часть. Тем не менее, для ваших целей должно работать что-то вроде
if defined? RUBY_ENGINE && RUBY_ENGINE == 'jruby'
.
t скажет вам, на каком двигателе он работает, например, на YARV я ожидаю, что RUBY_ENGINE
будет 'yarv'
, но на самом деле это 'ruby'
. Таким образом, он терпит неудачу в части «идентификации».
«рубиновый»
, что означает, что он не только не сообщает вам, какой у вас двигатель. работает, но также существуют разные двигатели, которые возвращают то же значение. IOW, он также не работает в «уникальной» части. RUBY_ENGINE
довольно новый, поэтому он еще не поддерживается всеми движками, что означает, что он не работает в «универсальном» "часть. Тем не менее, для ваших целей должно работать что-то вроде
if defined? RUBY_ENGINE && RUBY_ENGINE == 'jruby'
.
t скажет вам, на каком двигателе он работает, например, на YARV я ожидаю, что RUBY_ENGINE
будет 'yarv'
, но на самом деле это 'ruby'
. Таким образом, он терпит неудачу в части «идентификации».
«рубиновый»
, что означает, что он не только не сообщает вам, какой у вас двигатель. работает, но также существуют разные движки, которые возвращают то же значение. IOW, он также не работает в «уникальной» части. RUBY_ENGINE
довольно новый, поэтому он еще не поддерживается всеми движками, что означает, что он не работает в «универсальном» "часть. Тем не менее, для ваших целей должно работать что-то вроде
if defined? RUBY_ENGINE && RUBY_ENGINE == 'jruby'
.
например, на YARV я ожидаю, что RUBY_ENGINE
будет 'yarv'
, но на самом деле это 'ruby'
. Таким образом, он терпит неудачу в части "идентификации".
«рубиновый»
, что означает, что он не только не сообщает вам, какой у вас двигатель. работает, но также существуют разные двигатели, которые возвращают то же значение. IOW, он также не работает в «уникальной» части. RUBY_ENGINE
довольно новый, поэтому он еще не поддерживается всеми движками, что означает, что он не работает в «универсальном» "часть. Тем не менее, для ваших целей должно работать что-то вроде
if defined? RUBY_ENGINE && RUBY_ENGINE == 'jruby'
.
например, на YARV я ожидаю, что RUBY_ENGINE
будет 'yarv'
, но на самом деле это 'ruby'
. Таким образом, он терпит неудачу в части "идентификации".
«рубиновый»
, что означает, что он не только не сообщает вам, какой у вас двигатель. работает, но также существуют разные двигатели, которые возвращают то же значение. IOW, он также не работает в «уникальной» части. RUBY_ENGINE
довольно новый, поэтому он еще не поддерживается всеми движками, что означает, что он не работает в «универсальном» "часть. Тем не менее, для ваших целей должно работать что-то вроде
if defined? RUBY_ENGINE && RUBY_ENGINE == 'jruby'
.
но на самом деле это «рубин»
. Таким образом, он терпит неудачу в части «идентификации».
«рубиновый»
, что означает, что он не только не сообщает вам, какой у вас двигатель. работает, но также существуют разные двигатели, которые возвращают то же значение. IOW, он также не работает в «уникальной» части. RUBY_ENGINE
довольно новый, поэтому он еще не поддерживается всеми движками, что означает, что он не работает в «универсальном» "часть. Тем не менее, для ваших целей должно работать что-то вроде
if defined? RUBY_ENGINE && RUBY_ENGINE == 'jruby'
.
но на самом деле это «рубин»
. Таким образом, он терпит неудачу в части "идентификации".
«рубиновый»
, что означает, что он не только не сообщает вам, какой у вас двигатель. работает, но также существуют разные движки, которые возвращают то же значение. IOW, он также не работает в «уникальной» части. RUBY_ENGINE
довольно новый, поэтому он еще не поддерживается всеми движками, что означает, что он не работает в «универсальном» "часть. Тем не менее, для ваших целей должно работать что-то вроде
if defined? RUBY_ENGINE && RUBY_ENGINE == 'jruby'
.
это означает, что он не только не сообщает вам, на каком двигателе вы работаете, но также есть разные двигатели, которые возвращают такое же значение. IOW, он также не работает в «уникальной» части. RUBY_ENGINE
довольно новый, поэтому он еще не поддерживается всеми движками, что означает, что он не работает в «универсальном» "часть. Тем не менее, для ваших целей должно работать что-то вроде
if defined? RUBY_ENGINE && RUBY_ENGINE == 'jruby'
.
это означает, что он не только не сообщает вам, на каком двигателе вы работаете, но также есть разные двигатели, которые возвращают такое же значение. IOW, он также не работает в «уникальной» части. RUBY_ENGINE
довольно новый, поэтому он еще не поддерживается всеми движками, что означает, что он не работает в «универсальном» "часть. Тем не менее, для ваших целей должно работать что-то вроде
if defined? RUBY_ENGINE && RUBY_ENGINE == 'jruby'
.
Как уже было сказано здесь, существует несколько способов обнаружения JRuby. Вот полный список, отсортированный по предпочтениям:
Простой и понятный:
RUBY_PLATFORM == "java"
Это также может быть использовано для других имплантов. Обратной стороной является то, что MRI 1.8.6 и 1.8.7 еще не поддерживают RUBY_ENGINE, поэтому нам нужен определенный? проверьте:
если определено? (RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
Если вы хотите знать немного больше, чем просто JRuby или нет:
если определено? JRUBY_VERSION
JRUBY_VERSION определяется только в JRuby и предоставляет краткую информацию о версии, например "1.5.0.dev"
Наименее любимый способ: требовать 'java' или требовать 'jruby' и спасать. Не следует использовать.