11/08/2018, 21:19

[Ghi chép] .zip, Time.current vs Time.now, và .methods

Thỉnh thoảng trên Ruby Việt Nam chat, hay trong quá trình tìm kiếm mình sẽ gặp được một số vấn đề nhỏ nhỏ, thú vị và có thể hữu dụng nên thường lưu lại (dưới dạng nháp). Từ giờ mình sẽ đưa những ghi chép lẻ tẻ lên đây với chú thích rõ ràng. Vừa là để tra cứu lúc cần thiết và hi vọng sẽ có ích cho ...

Thỉnh thoảng trên Ruby Việt Nam chat, hay trong quá trình tìm kiếm mình sẽ gặp được một số vấn đề nhỏ nhỏ, thú vị và có thể hữu dụng nên thường lưu lại (dưới dạng nháp). Từ giờ mình sẽ đưa những ghi chép lẻ tẻ lên đây với chú thích rõ ràng. Vừa là để tra cứu lúc cần thiết và hi vọng sẽ có ích cho mọi người.

keys = [:key_1, :key_2, :key_3]
values = [:value_1, :value_2, :value_3]

keys.zip values
=> [[:key_1, :value_1], [:key_2, :value_2], [:key_3, :value_3]]

keys.zip(values).to_h
=> {:key_1=>:value_1, :key_2=>:value_2, :key_3=>:value_3}

Hash[keys.zip(values)]
=> {:key_1=>:value_1, :key_2=>:value_2, :key_3=>:value_3}

Theo Rails doc: Time.current trả về Time.zone.now khi Time.zone hoặc config.time_zone được thiết lập, nếu không sẽ trả về Time.now.

Lưu ý: Time.now là hàm của Ruby. Time.current và Time.zone do Rails mở rộng.

VD: Khi Time zone được thiết lập bằng "Asia/Tokyo":

Time.now
# => 2015-04-10 09:11:57 +0700
Time.current
# => Fri, 10 Apr 2015 11:12:01 JST +09:00

.methods và .public_methods liệt kê các public methods của 1 object.

Tương tự .private_methods và .protected_methods liệt kê các private methods và protected method của 1 object.

Klass.instance_methods liệt kê các public methods (được kế thừa) của 1 object được khởi tạo từ Klass

Thêm argument false khi gọi các hàm trên sẽ lược bỏ các methods được kế thừa trong danh sách trả về .

VD:

s = String.new
# => "" 
s.methods
# => [:<=>, :==, :===, :eql?, :hash, :casecmp, :+, :*, :%, :[], :[]=,..., :__send__, :__id__] 
s.methods == s.public_methods
# => true 
s.methods == String.instance_methods
# => true 
s.methods false
# => []
2.1.0 :018 > def s.something; end
# => :something
s.methods false
# => [:something] 
s.methods == String.instance_methods
# => false 
0