Начиная с 2018 года, вам нужно установить следующий атрибут:
android:layout_centerInParent="true"
См. Класс Vector :
require "matrix"
x = Vector[100, 100]
y = Vector[2, 3]
print x + y
E:\Home> ruby t.rb
Vector[102, 103]
См. vectorops для дополнительных операций с векторами:
… следующие операции работают как ожидалось
v1 = Vector[1,1,1,0,0,0]
v2 = Vector[1,1,1,1,1,1]
v1[0..3]
# -> Vector[1,1,1]
v1 += v2
# -> v1 == Vector[2,2,2,1,1,1]
v1[0..3] += v2[0..3]
# -> v1 == Vector[2,2,2,0,0,0]
v1 + 2
# -> Vector[3,3,3,1,1,1]
См. Также векторопс .
Array # zip:
$ irb
irb(main):001:0> [100,100].zip([2,3]).map { |e| e.first + e.last }
=> [102, 103]
Короче:
irb(main):002:0> [100,100].zip([2,3]).map { |x,y| x + y }
=> [102, 103]
Обобщено на> 2 измерения с помощью #inject:
irb(main):003:0> [100,100,100].zip([2,3,4]).map { |z| z.inject(&:+) }
=> [102, 103, 104]
Или, если вам нужно произвольное поведение этого разнообразия в измерениях (например, сложение математических векторов)
class Vector < Array
def +(other)
case other
when Array
raise "Incorrect Dimensions" unless self.size == other.size
other = other.dup
self.class.new(map{|i| i + other.shift})
else
super
end
end
end
class Array
def to_vector
Vector.new(self)
end
end
[100,100].to_vector + [2,3] #=> [102,103]
Отсутствие карты в стиле шепелявых весьма неприятно.
В Риме..monkeypatch.
module Enumerable
def sum
inject &:+
end
def vector_add(*others)
zip(*others).collect &:sum
end
end
Затем вы можете выполнить a.vector_add (b), и это сработает. Я считаю, что для этого требуется Ruby 1.8.7 или расширение, которое добавляет Symbol.to_proc. Таким же образом можно добавить произвольное количество векторов.
module PixelAddition
def +(other)
zip(other).map {|num| num[0]+num[1]}
end
end
Затем вы можете либо создать подкласс Array, который смешивается с модулем, либо добавить поведение к определенным массивам, например:
class <<an_array
include PixelAddition
end