- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
module CoreExt; module Array
# Check if all array members are instances of given class(es).
#
# @return [Boolean]
# @param [Array, Class] klasses_allowed Array of classes, or a single class
# @note Returns <tt>true</tt> if the array is empty.
def is_array_of?(klasses_allowed)
if klasses_allowed.kind_of? Array
fail ArgumentError, "Array of Classes expected. Some members are not instances of Class." \
unless klasses_allowed.is_array_of?(Class)
elsif klasses_allowed.kind_of? Class
klasses_allowed = [klasses_allowed]
else
fail ArgumentError, "Class or array of classes expected, #{klasses_allowed.class.name} given"
end
return true if self.empty?
self.map(&:class).uniq.reject{ |klass| klasses_allowed.include?(klass) }.empty?
end
# @note Sums array members.
#
# @return [nil] If source array contains non-numeric values.
# @return [Fixnum, Integer, Float]
def sum
return nil unless self.is_array_of? [Integer, Float, Fixnum]
self.inject(0) { |sum, value| sum + value }
end
# Boil down values proportionally, to make their sum equal to <tt>target_sum</tt>.
#
# @param [Fixnum] target_sum
# @return [Array] Array of pairs [old value, new_value].
def reduce_to_sum(target_sum)
current_sum = self.sum
gap = current_sum - target_sum
if gap < 0
return nil
elsif gap == 0
return self.collect { |value| [value, value] }
else
reduced = 0
result = self.collect do |value|
x = (gap * value) / current_sum # Floats round here
reduced += x
[value, value - x]
end
# Second pass, as target sum is not reached yet due to rounding of floats
(gap - reduced).times { |i| result[i][1] -= 1 }
result
end
end
end; end
if defined? Array
Array.class_eval do
include CoreExt::Array
end
end
https://github.com/gorodulin/assemblr/blob/master/lib/core_ext/array.rb
А автор да, упорот. Вообще среди рубистов уж очень много говнокодеров в инете, видимо синтаксис развращает. Особенно запомнилось когда какой-то рубист спрашивал на SO как определить что все числа в массиве равны, вариант сравнить с первым ему в голову не пришел, зато всяких reduce и reject в избытке.
руби симпатичный, его сообщество породило много хороших практик, там всякие континиус деливери, девопсы, rake, bdd, cocoa pods, chief, puppet. много чего
почему же он в срне гвн скатился?
Единственный вред который я видел от его веб-ориентированности - разработчики рубиниус даже не сочли нужным его под винду собирать, мол все равно среди них нет никого кто им под виндой пользуется. В итоге ололо-быстродействие и llvm только под линуксом.
Я запускал apache + mod_wsgi под винду вместо гуникорна и работало, как часы.
Сём, а ты словом "ебаное прыщеговно" называешь всё, в чем не разбираешься?
Ну например "квантовая мехника -- ебаное прыщеговно", да?
1 его ниша прочно занята питоном
2 коммерческое использование рубей сводится рельсам, где таким MVC (и даже лучше) полным полно
3 Матц перемудрил и придумал концепцию наименьшего удивления при условии, что ты знаешь язык. Хотя с одной стороны это имеет смысл (посмотрите на жс с его подводными камнями)
в 2008м году про него говорили буквально все. А теперь процент его как-то очень сильно упал
еще раз: chief, puppet
> chief, puppet
Кто такие?
Я не знаю поцчему питон выпёздывает руби. Может быть потому что явное лучше неявного. Может быть потому что хорошо портируется и ембеддится. Может быть потому что приятнее читать код когда есть один (а не двадцать один) способ сделать это. Может быть потому что пистон имеет огромный научный библиотек, всякиий там сайпай, пандас, вот это всё. Может потому что его гугол любит. Хз
одни из первых популярных систем для управления инфраструктурами
их пиарили еще в эпическом "континиус деливери", на них девоспы дрочат
у питона тоже есть salt и fabric, просто рубийное сообщество было авангарде автоматизации
Какой скучный язык. То ли дело кресты. Больше 10 лет с ними работаешь, а всё ещё удивляешься.
Да, хочется чего-то эдакого, а не писать унылый цикл.
http://stackoverflow.com/questions/35295181/equality-test-on-three-or-more-objects
Хуясе, у них есть специальный метод, чтобы проверить, равно ли число одному?
И рельсы таки дописывают методы к чему угодно, чтоб можно было поидиоматичнее с единицей сравнить.
Это че за лол?
Говорю как любитель objC
Говнокод != говно
Код не может выглядеть как говнокод, но может как говно
Говнокод - понятие логическое. Что бы понять, кто код является говнокодом, нужно понять что он делает и что именно в нем не так