Yanıtlar:
def sumdiff(x, y)
return x+y, x-y
end
#=> nil
sumdiff(3, 4)
#=> [7, -1]
a = sumdiff(3,4)
#=> [7, -1]
a
#=> [7, -1]
a,b=sumdiff(3,4)
#=> [7, -1]
a
#=> 7
b
#=> -1
a,b,c=sumdiff(3,4)
#=> [7, -1]
a
#=> 7
b
#=> -1
c
#=> nil
def foo_and_bar; ['foo', 'bar']; end
Ruby'nin sınırlı bir yıkıcı bağlama biçimi vardır:
ary = [1, 2, 3, 4]
a, b, c = ary
p a # => 1
p b # => 2
p c # => 3
a, b, *c = ary
p c # => [3, 4]
a, b, c, d, e = ary
p d # => 4
p e # => nil
Ayrıca sınırlı bir yapılandırma bağına sahiptir:
a = 1, 2, 3
p a # => [1, 2, 3]
Bu iki formu şu şekilde birleştirebilirsiniz:
a, b = b, a # Nice way to swap two variables
a, b = 1, 2, 3
p b # => 2
def foo; return 1, 2 end
a, b = foo
p a # => 1
p b # => 2
Yıkma / yapılandırma bağlarıyla yapabileceğiniz başka şeyler var. *Sağ tarafta uyarıcı operatörünü ( ) kullanarak göstermedim . İç içe geçmeyi göstermedim (parantez kullanarak). Bir bloğun veya yöntemin parametre listesinde yıkım bağını kullanabileceğinizi göstermedim.
İşte sadece bir meze:
def foo(((a, b, c, d), e, *f), g, *h)
local_variables.sort.each do |lvar| puts "#{lvar} => #{eval(lvar).inspect}" end
end
foo([[1, 2, 3], 4, 5, 6], 7, 8, 9)
# a => 1
# b => 2
# c => 3
# d => nil
# e => 4
# f => [5, 6]
# g => 7
# h => [8, 9]
Birden çok değer döndürmek genellikle yararlı olsa da, genellikle yeni bir nesne gereksinimi için bir işaretçi buluyorum.
Yani, genellikle bu dönüş değerlerinin anlam / bağlam olarak birbirine sıkı sıkıya bağlı olduğunu ve bu şekilde aktarıldığını görüyorum. Yani bu durumlarda bunları birbirine bağlamak için yeni bir nesne yaratırdım. Tanımayı öğrendiğim özel bir kod kokusu.
chunkdeğildir, yoksa böyle şeyler olmazdı. Yine de mükemmel prensip. Kod kokusu gerçekten. Devam et.
>>kalkacaktır.