Splat Opera trong Ruby
Như tiêu đề hôm nay mình xin giớ thiệu với các bạn cách sử dụng splat trong ruby Method Definitions Đầu tiên ta cùng xem ví dụ sau: def shout_out ( message , * friends ) friends . each { | f | puts " #{ f } : #{ message } " } end shout_out ( "Hi there!" , ...
Như tiêu đề hôm nay mình xin giớ thiệu với các bạn cách sử dụng splat trong ruby
Method Definitions
Đầu tiên ta cùng xem ví dụ sau:
def shout_out(message, *friends) friends.each { |f| puts "#{f}: #{message}" } end shout_out("Hi there!", "Bob", "Steve", "Dave") # => " #Bob: Hi there! #Steve: Hi there! #Dave: Hi there!"
Trên đây có lẽ là cách dùng Splat phổ biến nhất. Trong trường hợp này Splat là parameters cuối cùng của function shout_out. Function trên sẽ gán mesage với giá trị là Hi there!. và gán friends với tất cả các biến truyền vào còn lại.
Với trường hợp splat là parameters ở giữa:
def shout_out(message, *friends, signoff) friends.each { |f| puts "#{f}: #{message}" } puts signoff end shout_out("Hi there!", "Bob", "Steve", "Dave", "Pete", "I'll see you later") #=> " #Bob: Hi there! #Steve: Hi there! #Dave: Hi there! #Pete: Hi there! I'll see you later"
=> giá trị sẽ được nhận vào như sau: message: "Hi there!" friends: "Bob", "Steve", "Dave", "Pete" signoff: "I'll see you later") Như vậy ruby xử lý rất tốt việc assign các value cho function khi được gọi. 2 ví dụ trên đều chỉ có 1 parametter sử dụng toán tử splat. Vậy điều gì xảy ra nếu có nhiều hơn vậy?. Ta cùng tiếp tục xem ví dụ sau:
def shout_out(*messages, *friends) friends.each do |f| messages.each { |m| puts "#{f}: #{m}" } end end shout_out("Hello!", "How are you?", "Bob", "Steve" # => # Splat.rb:14: syntax error, unexpected tSTAR #def shout_out(*mesages, *friends) # ^ #Splat.rb:18: syntax eror, unexpected keyword_end, expecting $end
Lỗi nhăn răng