Скрытые функции Ruby

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

160
задан 7 revs, 5 users 32% 23 May 2017 в 10:31
поделиться

37 ответов

class A

  private

  def my_private_method
    puts 'private method called'
  end
end

a = A.new
a.my_private_method # Raises exception saying private method was called
a.send :my_private_method # Calls my_private_method and prints private method called'
2
ответ дан 23 November 2019 в 21:27
поделиться

Я считаю это полезным в некоторых скриптах. Это позволяет напрямую использовать переменные среды, например, в сценариях оболочки и Makefile. Переменные среды используются как резерв для неопределенных констант Ruby.

>> class <<Object
>>  alias :old_const_missing :const_missing
>>  def const_missing(sym)
>>   ENV[sym.to_s] || old_const_missing(sym)
>>  end
>> end
=> nil

>> puts SHELL
/bin/zsh
=> nil
>> TERM == 'xterm'
=> true
8
ответ дан 23 November 2019 в 21:27
поделиться

Совет Джеймса А. Розена крут ([*пункты]. Каждый), но я нахожу, что он уничтожает хэши:

irb(main):001:0> h = {:name => "Bob"}
=> {:name=>"Bob"}
irb(main):002:0> [*h]
=> [[:name, "Bob"]]

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

irb(main):003:0> h = {:name => "Bob"}
=> {:name=>"Bob"}
irb(main):004:0> [h].flatten
=> [{:name=>"Bob"}]

Это можно комбинировать с сигнатурой метода, как это мило:

def process(*entries)
  [entries].flatten.each do |e|
    # do something with e
  end
end
4
ответ дан 23 November 2019 в 21:27
поделиться

Мне просто нравится ключевое слово rescue вот так:
РЕДАКТИРОВАННЫЙ ПРИМЕР:

@user #=> nil (but I did't know)
@user.name rescue "Unknown"
link_to( d.user.name, url_user( d.user.id, d.user.name)) rescue 'Account removed'

Это позволяет избежать поломки моего приложения и намного лучше, чем функция, выпущенная в Rails .try()

4
ответ дан 23 November 2019 в 21:27
поделиться
@user #=> nil (but I did't know)
@user.name rescue "Unknown"
2
ответ дан 23 November 2019 в 21:27
поделиться

Я фанат:

%w{An Array of strings} #=> ["An", "Array", "of", "Strings"]

Забавно, как часто это полезно.

5
ответ дан 23 November 2019 в 21:27
поделиться

each_with_index метод для любого перечисляемого объекта (массив, хэш и т. Д.) Возможно?

myarray = ["la", "li", "lu"]
myarray.each_with_index{|v,idx| puts "#{idx} -> #{v}"}

#result:
#0 -> la
#1 -> li
#2 -> lu

Возможно, он более известен, чем другие ответы, но не так хорошо известен всем программистам на Ruby :)

3
ответ дан 23 November 2019 в 21:27
поделиться