2010-11-12 36 views
16

thể trùng lặp:
What is the * operator doing to this string in Ruby* (sao) có nghĩa là gì trong Ruby?

Có lẽ đó là câu trả lời cho điều đó ở nơi khác, nhưng tôi chỉ không biết làm thế nào để tìm thấy nó ...

Nếu tôi đúng , * nghĩa là nhiều thông số nếu được sử dụng trong định nghĩa hàm:

def hero(name, *super_powers) 

Nhưng những gì * làm trong các mã như thế này:

Hash[*[[:first_name, 'Shane'], [:last_name, 'Harvie']].flatten] # => {:first_name=>"Shane", :last_name=>"Harvie"} 
+0

Có thể trùng lặp: http://stackoverflow.com/questions/918449/what-is-the-operator-doing-to-this-string-in-ruby –

Trả lời

33

Variable Danh sách Chiều dài Argument, Asterisk hành

Tham số cuối cùng của một phương pháp có thể được bắt đầu bằng dấu sao (*), mà đôi khi được gọi là toán tử 'splat'. Điều này cho thấy nhiều thông số hơn có thể được chuyển cho hàm. Các tham số đó được thu thập và một mảng được tạo ra.

Toán tử dấu hoa thị cũng có thể đứng trước đối số Array trong cuộc gọi phương thức. Trong trường hợp này, Mảng sẽ được mở rộng và các giá trị được truyền vào như thể chúng được phân tách bằng dấu phẩy.

+1

Còn được gọi là hàm Biến thể –

+3

Không phải là giải thích đầy đủ. Nó được gọi là toán tử splat http://theplana.wordpress.com/2007/03/03/ruby-idioms-the-splat-operator/ –

+0

Dường như khi nó được theo sau bởi một khối và nó không phải là tham số cuối cùng của một phương thức. Tôi đi qua điều này với các chức năng tài nguyên trên bản đồ tuyến đường ray. Tôi mới đến ruby ​​và có lẽ đó là nhiều hơn vì các & khối tham số là một trường hợp đặc biệt. – DustinA