- 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
splatt 28.05.2016 10:00 # 0
kipar 28.05.2016 10:30 # −1
А автор да, упорот. Вообще среди рубистов уж очень много говнокодеров в инете, видимо синтаксис развращает. Особенно запомнилось когда какой-то рубист спрашивал на SO как определить что все числа в массиве равны, вариант сравнить с первым ему в голову не пришел, зато всяких reduce и reject в избытке.
guesto 28.05.2016 13:44 # 0
kipar 29.05.2016 20:48 # 0
guestinho 30.05.2016 01:44 # +1
руби симпатичный, его сообщество породило много хороших практик, там всякие континиус деливери, девопсы, rake, bdd, cocoa pods, chief, puppet. много чего
почему же он в срне гвн скатился?
kipar 30.05.2016 09:24 # −1
Единственный вред который я видел от его веб-ориентированности - разработчики рубиниус даже не сочли нужным его под винду собирать, мол все равно среди них нет никого кто им под виндой пользуется. В итоге ололо-быстродействие и llvm только под линуксом.
guesto 30.05.2016 14:59 # 0
kipar 30.05.2016 18:22 # 0
3_14dar 30.05.2016 19:26 # 0
guesto 30.05.2016 19:27 # 0
Я запускал apache + mod_wsgi под винду вместо гуникорна и работало, как часы.
Сём, а ты словом "ебаное прыщеговно" называешь всё, в чем не разбираешься?
Ну например "квантовая мехника -- ебаное прыщеговно", да?
3_14dar 31.05.2016 21:45 # 0
kegdan 30.05.2016 09:39 # 0
1 его ниша прочно занята питоном
2 коммерческое использование рубей сводится рельсам, где таким MVC (и даже лучше) полным полно
3 Матц перемудрил и придумал концепцию наименьшего удивления при условии, что ты знаешь язык. Хотя с одной стороны это имеет смысл (посмотрите на жс с его подводными камнями)
guesto 30.05.2016 15:00 # 0
kegdan 30.05.2016 16:40 # 0
3_14dar 30.05.2016 19:26 # −1
bormand 30.05.2016 20:01 # +1
guesto 30.05.2016 20:06 # −1
в 2008м году про него говорили буквально все. А теперь процент его как-то очень сильно упал
3_14dar 30.05.2016 20:47 # 0
guesto 30.05.2016 20:48 # 0
еще раз: chief, puppet
3_14dar 30.05.2016 21:06 # 0
> chief, puppet
Кто такие?
guesto 30.05.2016 21:08 # 0
Я не знаю поцчему питон выпёздывает руби. Может быть потому что явное лучше неявного. Может быть потому что хорошо портируется и ембеддится. Может быть потому что приятнее читать код когда есть один (а не двадцать один) способ сделать это. Может быть потому что пистон имеет огромный научный библиотек, всякиий там сайпай, пандас, вот это всё. Может потому что его гугол любит. Хз
guesto 30.05.2016 21:11 # 0
одни из первых популярных систем для управления инфраструктурами
их пиарили еще в эпическом "континиус деливери", на них девоспы дрочат
у питона тоже есть salt и fabric, просто рубийное сообщество было авангарде автоматизации
3_14dar 31.05.2016 21:45 # 0
kegdan 01.06.2016 08:46 # 0
bormand 30.05.2016 20:51 # +1
Какой скучный язык. То ли дело кресты. Больше 10 лет с ними работаешь, а всё ещё удивляешься.
guesto 30.05.2016 21:06 # +2
3_14dar 29.05.2016 22:50 # +1
Да, хочется чего-то эдакого, а не писать унылый цикл.
kipar 29.05.2016 23:24 # 0
http://stackoverflow.com/questions/35295181/equality-test-on-three-or-more-objects
3_14dar 29.05.2016 23:32 # 0
Хуясе, у них есть специальный метод, чтобы проверить, равно ли число одному?
guesto 29.05.2016 23:42 # 0
3_14dar 30.05.2016 00:06 # 0
kipar 30.05.2016 00:23 # 0
И рельсы таки дописывают методы к чему угодно, чтоб можно было поидиоматичнее с единицей сравнить.
3_14dar 30.05.2016 00:40 # 0
kipar 30.05.2016 09:17 # 0
3_14dar 30.05.2016 19:27 # −1
kipar 30.05.2016 21:31 # 0
guest 31.05.2016 14:13 # 0
3_14dar 30.05.2016 00:06 # 0
Это че за лол?
kipar 30.05.2016 00:28 # 0
3_14dar 30.05.2016 00:39 # −1
kegdan 30.05.2016 03:19 # 0
guesto 30.05.2016 03:27 # −1
Говорю как любитель objC
3_14dar 30.05.2016 19:27 # 0
kipar 30.05.2016 09:18 # −1
kegdan 28.05.2016 16:05 # +3
Говнокод != говно
Код не может выглядеть как говнокод, но может как говно
Говнокод - понятие логическое. Что бы понять, кто код является говнокодом, нужно понять что он делает и что именно в нем не так
guesto 28.05.2016 18:53 # 0
CHayT 28.05.2016 21:33 # +2
dxd 29.05.2016 11:25 # +2