Проверка синтаксиса или “компиляция” приложения Ruby on Rails

vi ~/.bash_profile

add

export JAVA_HOME=`/usr/libexec/java_home -v 1.7`

Это говорит вашей целевой ссылке /usr/bin/java использовать последний пакет Java 7, установленный в

/Library/Java/JavaVirtualMachines/

Таким образом, для JDK 1.7.0_17 JAVA_HOME было бы:

/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home

Примечание. В последнее время в этой области произошли значительные изменения. переместите Mac OS X из собственных пакетов Java компании Appels в пакеты Java на основе Oracle. Вышеупомянутое решение работает нормально с Mac OS X 10.8.2

6
задан Chris C 9 July 2009 в 14:37
поделиться

5 ответов

Ruby doesn't allow you to redefine the == operator for Object. In ruby 1.8 you can't, Ruby 1.9 was supposed to do but I haven't been able to get my script working for core classes. It works well for custom defined objects.

class Object

  alias :equal_without_warning :==

  def ==(object)
    unless self.class == object.class
      warn("Comparing `#{self.class}' with `#{object.class}'")
    end
    equal_without_warning(object)
  end

end

Assuming I didn't do some stupid coding error, the answer is NO: you can't check whether you are comparing different type of objects.

Also, I would say you don't. Actually Ruby isn't designed to work in this way, this is more a java approach rather than Ruby style.

2
ответ дан 10 December 2019 в 02:52
поделиться

Я бы посоветовал две вещи:

Первый: прочтите IRB (или скрипт / консоль для рельсов). Обычная практика разработки на динамических языках - опробовать фрагменты кода внутри «живого» интерпретатора (например, IRB или консоли rails). Эта практика восходит к самым ранним динамическим языкам, таким как Smalltalk и Lisp. Ruby-debug также очень полезен для устранения неполадок и был бы очень простым способом выяснить ошибку в вашем примере.

Два: прочтите "Утиный ввод". «Типы» и переменные работают в Ruby несколько иначе, чем многие от них ожидают. Насколько я понимаю, такая переменная, как user.id, не имеет «типа». Значение , указанное user.id на , действительно имеет тип, но сама переменная - нет. Я полагаю, что' Это одна из причин, почему не существует инструмента, который бы сообщил вам, в чем была ваша ошибка, до запуска программы. Сравнение этих двух переменных не является ошибкой, потому что переменные не имеют типа. user.id указывал на целое число в этот момент в вашей программе, но было бы совершенно законно назначить user.id, чтобы он указывал на строку, после чего это сравнение имело бы намного больше смысла. : -)

0
ответ дан 10 December 2019 в 02:52
поделиться

Сначала проверьте, затем введите код. Если вы пишете тесты, которые охватывают все ветви вашего приложения, вы получаете уверенность в том, что ваш код работает и дает правильные результаты.

РЕДАКТИРОВАТЬ: Я должен указать, что возможность сравнивать два типа не зависит от имен методов до тех пор, пока последняя секунда и т. д. - это основные особенности Ruby.

Вы не столько вызываете метод, сколько отправляете сообщение объекту. Затем объект отвечает за выяснение того, как обрабатывать метод. В Rails это используется для доступа к столбцам БД в ActiveRecord. Для столбцов нет методов до тех пор, пока объекту не будет отправлено сообщение с именем столбца.

Статическая типизация в Ruby противоречит системе утиной печати. Часто полиморфизм можно получить бесплатно, не беспокоясь о сложных схемах наследования / интерфейса.

5
ответ дан 10 December 2019 в 02:52
поделиться

Руби не должна быть в безопасности. Он позволяет сравнивать любые два объекта, и именно в этом заключается его сила. Rails был бы невозможен без такого динамического дизайна.

Даже скомпилированный язык, такой как Java или C, не помешает вам выполнить == для двух объектов. Как сказал Бен, лучше сначала протестировать. Осмотрите конструкции, с которыми вы работаете. Один из способов получить информацию об объекте Ruby - использовать:

puts object.class
1
ответ дан 10 December 2019 в 02:52
поделиться

В общем, лучший способ (я знаю) избежать этого типа проблем для динамических языков / языков сценариев - это перенести «логику» в методы / команды и написать для них модульные тесты. По сути, все, что может дать сбой, следует проверять. Код на странице должен быть тупой логикой ... вместо того, чтобы отображать только те элементы, которые соответствуют определенным критериям, он должен отображать все элементы и получать этот список элементов из метода, который возвращает только те, которые должны отображаться.

1
ответ дан 10 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

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