Как я могу сказать, работаю ли я от JRuby по сравнению с Ruby?

Я работал над расположением CSS, записанным кем-то, кто думал, что размер, данный элементу, является size+padding+border как в IE5 и не только поле содержания, как объяснено в официальной спецификации. Это было записано только некоторые месяц назад, таким образом, он сделал грязные взломы, чтобы заставить его хорошо выглядеть в IE7. Мне потребовались несколько часов с FireBug для разыскивания источника проблемы и к тому времени, когда я понял это, я действительно раздражался.

при открытии сайта с "плавающим" CSS, записанным для IE5 в Firefox, поля просто не имеют достаточного количества пространства, чтобы соответствовать и падать страница. При открытии его в IE7, это выглядит хорошим, поскольку IE7 позволяет границам наложиться так, это выглядит почти корректным. Для кого-то столь же неопытного как я было трудно отметить.

42
задан Nakilon 4 September 2014 в 07:57
поделиться

3 ответа

Я думаю, вы можете проверить константу RUBY_PLATFORM.

50
ответ дан 26 November 2019 в 23:31
поделиться

Я не совсем понимаю ваш вопрос. Кажется, вы смешиваете два совершенно разных уровня абстракции: Ruby - это язык программирования, JRuby - компилятор для языка программирования Ruby. Вопрос о том, работает ли ваша программа на Ruby или просто на JRuby, не имеет смысла: когда она выполняется в JRuby, она ​​выполняется в Ruby, потому что JRuby является реализацией Ruby.

Это то же самое, что спросить: «Как мне узнать, вожу ли я Ford или машину?»

Если вы хотите знать, в какой реализации Ruby вы используете, то можете проверить глобальный RUBY_ENGINE константа. Предполагается, что он универсально и однозначно идентифицирует двигатель, на котором вы работаете, хотя, к сожалению, он не работает по трем причинам:

  1. на некоторых двигателях, он не сообщает вам, на каком двигателе он работает, например, на YARV я ожидаю, что RUBY_ENGINE будет 'yarv' , но на самом деле это «рубин» . Таким образом, он терпит неудачу в части "идентификации".
  2. даже хуже: на МРТ он также «рубиновый» , что означает, что он не только не сообщает вам, какой у вас двигатель. работает, но также существуют разные двигатели, которые возвращают то же значение. IOW, он также не работает в «уникальной» части.
  3. и, наконец, что не менее важно, 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'
    

    .

    6
    ответ дан 26 November 2019 в 23:31
    поделиться

    Как уже было сказано здесь, существует несколько способов обнаружения JRuby. Вот полный список, отсортированный по предпочтениям:

    1. Простой и понятный:

       RUBY_PLATFORM == "java"
      
    2. Это также может быть использовано для других имплантов. Обратной стороной является то, что MRI 1.8.6 и 1.8.7 еще не поддерживают RUBY_ENGINE, поэтому нам нужен определенный? проверьте:

       если определено? (RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
      
    3. Если вы хотите знать немного больше, чем просто JRuby или нет:

       если определено? JRUBY_VERSION
      

      JRUBY_VERSION определяется только в JRuby и предоставляет краткую информацию о версии, например "1.5.0.dev"

    4. Наименее любимый способ: требовать 'java' или требовать 'jruby' и спасать. Не следует использовать.

    44
    ответ дан 26 November 2019 в 23:31
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: