Gần đây tôi phát hiện ra rằng tap
có thể được sử dụng để "khoan nhượng" gán giá trị cho các biến mới; Ví dụ, để tạo và làm đầy một mảng, như thế này:Phương pháp Ruby 'tap' - bên trong gán
array = [].tap { |ary| ary << 5 if something }
Mã này sẽ đẩy 5
vào array
nếu something
là truthy; nếu không, array
sẽ vẫn trống.
Nhưng tôi không hiểu tại sao sau khi thực hiện mã này:
array = [].tap { |ary| ary += [5] if something }
array
vẫn trống. Ai giúp tôi với?
THÊM: 'a + = b' hoạt động như' a = a + b' - ở đây việc tạo một đối tượng mới rõ ràng hơn. – Nakilon
@Nakilon: Do OP nói rõ ràng về nhiệm vụ, tôi cho rằng phần đó rõ ràng với anh ấy. – sepp2k
ok, tôi nghĩ rằng tôi hiểu; nó không hoạt động beacuse của hoạt động gán. Để có được hiệu quả mà tôi muốn tôi nên làm
array = [].tap { |ary| [5].each{ |v| ary << 5 } }
--- Làm cách nào để bạn có thể thêm định dạng vào nhận xét của mình ?? – mdesantis