Câu trả lời:
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 có một dạng ràng buộc hủy cấu trúc hạn chế:
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
Nó cũng có một dạng cấu trúc ràng buộc hạn chế:
a = 1, 2, 3
p a # => [1, 2, 3]
Bạn có thể kết hợp hai hình thức đó như sau:
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
Có một số điều khác bạn có thể làm với liên kết hủy cấu trúc / cấu trúc. Tôi đã không hiển thị bằng cách sử dụng toán tử splat ( *
) ở phía bên phải. Tôi đã không hiển thị lồng (sử dụng parantheses). Tôi không cho thấy rằng bạn có thể sử dụng liên kết hủy cấu trúc trong danh sách tham số của một khối hoặc phương thức.
Đây chỉ là một món khai vị:
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]
Trong khi trả về nhiều giá trị thường hữu ích, tôi thường thấy nó là một con trỏ đến một yêu cầu đối tượng mới.
Đó là, tôi thường thấy rằng những giá trị trả về đó được gắn chặt với nhau theo ý nghĩa / ngữ cảnh và được chuyển xung quanh như vậy. Vì vậy, trong những trường hợp này, tôi sẽ tạo một đối tượng mới để buộc chúng lại với nhau. Đó là một mùi mã đặc biệt mà tôi đã học được để nhận ra.
chunk
sẽ không tồn tại. Nguyên tắc tuyệt vời mặc dù. Đúng là mùi mã. Đá lên.
>>
lời nhắc của irb sẽ biến mất.