Что самое важное знать о Ruby? [закрыто]

String a = new String("foo");
String b = new String("foo");
System.out.println(a == b); // prints false
System.out.println(a.equals(b)); // prints true

Убедитесь, что вы понимаете, почему. Это потому, что сравнение == сравнивает только ссылки; equals() метод сопоставляет содержимое по символу.

Когда вы вызываете new для a и b, каждый получает новую ссылку, указывающую на "foo" в таблице строк. Ссылки разные, но контент один и тот же.

13
задан 8 revs, 3 users 93% 5 August 2012 в 00:25
поделиться

18 ответов

Все (кроме false и nil ) оценивается как true в логическом контексте.

Это отличается от других языков, где пустые конструкции или 0 часто оцениваются как ложные .

if 0
    puts "0 evaluates to true"
end
12
ответ дан 1 December 2019 в 17:36
поделиться

Если вы действительно умеете программировать, вы уже знаете самые важные вещи о языке программирования Ruby. Просто следуй за ними.

Остальное находится в стопке руководств ; читать их.

-2
ответ дан 1 December 2019 в 17:36
поделиться

Ruby использует передачу сообщений, а не вызовы функций.

например,

# These are all the same:
5 + 3
5.+(3)
5.send(:+, 3)
5
ответ дан 1 December 2019 в 17:36
поделиться

никто бы никогда не услышал об этом, если бы не Rails?

.
-11
ответ дан 1 December 2019 в 17:36
поделиться

ruby-debug - ваш друг. Я, наверное, использую его больше, чем любой другой драгоценный камень. Учитывая динамическую природу Ruby, трудно точно узнать, что делает конкретный фрагмент кода, глядя на текст в вашем редакторе. Просто поставьте перед ним «отладчик» и войдите в него.

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

1
ответ дан 1 December 2019 в 17:36
поделиться

Вы не можете перегрузить operator = так же, как вы сделали на C ++. Вы также не можете смоделировать это каким-либо разумным способом.

0
ответ дан 1 December 2019 в 17:36
поделиться

Стоит прочитать полностью: -

Топ 5 новых функций в Ruby 1.9

  1. YARV - Еще одна виртуальная машина Ruby
  2. Волокна
  3. Именованные группы регулярных выражений

4. Лямбда-оператор

5.RubyGems и Rake объединены с Ruby

1
ответ дан 1 December 2019 в 17:36
поделиться

irb, pp, lp и ap - очень полезные волшебные слова! ;)

  1. http://github.com/oggy/looksee = lp
  2. http://github.com/michaeldv/awesome_print = ap
1
ответ дан 1 December 2019 в 17:36
поделиться
  1. Вы можете использовать модули ruby ​​в качестве миксинов, если ваш дизайн требует множественного наследования
  2. Каждый метод возвращает значение своего последнего оператора в качестве значения метода, хотя вы можете использовать return , где вы хотите быть более откровенным.
  3. Вы можете снова открыть любой класс и добавить к нему методы, называемые исправлением обезьяны, которые могут быть очень мощными при разумном использовании, иначе ад сломается.
  4. Вы можете передать блок кода любому методу и работать с ним, например в мире рубинов большинство тайм-кодеров используют итераторы вместо для циклов.
  5. По возможности используйте символов вместо строк, потому что они эффективны, например в хэш-ключах

и т. д.

7
ответ дан 1 December 2019 в 17:36
поделиться

Я думаю, что люди охватили здесь большую часть основ. Вот некоторые дополнительные сведения:

унаследовано , включено , class_eval , instance_eval и:

@a = "something"
class << @a
  def moo
    puts "moo"
  end
end
@a.moo
@b = "something else"
@b.moo

eval - зло. Никогда не используйте его, если вы действительно, действительно , действительно не знаете, что делаете.

0
ответ дан 1 December 2019 в 17:36
поделиться

Строки являются изменяемыми; символы - нет.

7
ответ дан 1 December 2019 в 17:36
поделиться

Методы неявно возвращают результат последнего оператора.

def foo
  "bar"
end

puts foo # outputs "bar"
8
ответ дан 1 December 2019 в 17:36
поделиться

Если вызывается метод, о котором Ruby не знает, Ruby вызовет method_missing с подробностями.

class MyClass
  def method_missing(method_name, *args)
    puts "Method #{method_name} called with arguments #{args.join(', ')}"
  end
end

my_instance = MyClass.new
my_instance.undefined_method(4, :blah)  # => Method undefined_method called with arguments 4, blah
2
ответ дан 1 December 2019 в 17:36
поделиться

v 1.9 очень сильно отличается от v 1.8. Код, созданный для 1.8, НЕ гарантированно будет работать в 1.9, и наоборот.

У меня была целая куча кода, который работал в v 1.8 и не работал в v 1.9, а затем пришлось иметь дело с двумя машинами, на каждой из которых были разные версии. Невесело.

Убедитесь, что выбрали версию (возможно, самую последнюю, но имейте в виду, что многие примеры кода в блогах в Интернете имеют версию 1.87, как и второе издание книги "Программирование Ruby". С тех пор было выпущено третье издание Programming Ruby, которое охватывает 1.9, и это то, что вам нужно.

Также, если вы похожи на меня, вы будете напевать одну из трех песен во время программирования:

2
ответ дан 1 December 2019 в 17:36
поделиться

Практически все является выражением, возвращающим значение. Сюда входят вещи, которые вы обычно не воспринимаете как выражения, например определения классов - определение класса оценивается по последнему выражению внутри него. Аналогичным образом, if и case - это выражения, которые дают тот же результат, что и последнее выражение в какой-либо ветви.

Именно то, что они оценивают, хотя не всегда сразу очевидно: def оценивается как ноль, но define_method оценивается как Proc, представляющий метод, который он определил. Это в сочетании с тем фактом, что определение класса является выражением, иногда удивляет людей:

class A
  define_method(:foo) {"hello"}
end

# => #<Proc:0x0001d718@(irb):18> # NOT nil

class A
  define_method(:bar) {"hello"}
  FAVORITE_NUMBER = 80
end

# => 80
3
ответ дан 1 December 2019 в 17:36
поделиться

Все является объектом. Все.

11
ответ дан 1 December 2019 в 17:36
поделиться

Не злоупотребляйте патчем обезьяны. Руби облегчает это, но может навредить.

См. Также Обезьяна-патч против. ТВЕРДЫЙ. принципы?

1
ответ дан 1 December 2019 в 17:36
поделиться

Стойка. Все современные веб-серверы и фреймворки Ruby используют протокол Rack. Хотя вы можете создать веб-приложение на Ruby, не зная Rack, оно даст вам хорошую основу и приобретает все большее значение в веб-сообществе Ruby.

Rack также может стать хорошей отправной точкой для обучения программированию веб-приложений на Ruby, поскольку вы можете начать с самого простого веб-приложения:

run lambda { |env| [200, {}, "hello world"] }

и продолжать строить оттуда. После того, как вы разберетесь в Rack, архитектурные решения в Sinatra, Rails и т. Д. Станут более понятными.

http://rack.rubyforge.org/

4
ответ дан 1 December 2019 в 17:36
поделиться