Tôi đã thường xuyên sử dụng mẫu này để mở rộng hành vi cốt lõi của Ruby để giúp dễ dàng hơn trong việc chuyển đổi các kiểu dữ liệu tùy ý thành các giá trị boolean, điều này giúp bạn thực sự dễ dàng đối phó với các tham số URL khác nhau, v.v.
class String
def to_boolean
ActiveRecord::Type::Boolean.new.cast(self)
end
end
class NilClass
def to_boolean
false
end
end
class TrueClass
def to_boolean
true
end
def to_i
1
end
end
class FalseClass
def to_boolean
false
end
def to_i
0
end
end
class Integer
def to_boolean
to_s.to_boolean
end
end
Vì vậy, giả sử bạn có một tham số foo
có thể là:
- một số nguyên (0 là sai, tất cả các số khác đều đúng)
- một boolean đúng (true / false)
- một chuỗi ("true", "false", "0", "1", "TRUE", "FALSE")
- không
Thay vì sử dụng một loạt các điều kiện, bạn chỉ có thể gọi foo.to_boolean
và nó sẽ thực hiện phần còn lại của phép thuật cho bạn.
Trong Rails, tôi thêm nó vào một trình khởi tạo có tên core_ext.rb
trong gần như tất cả các dự án của tôi vì mẫu này rất phổ biến.
## EXAMPLES
nil.to_boolean == false
true.to_boolean == true
false.to_boolean == false
0.to_boolean == false
1.to_boolean == true
99.to_boolean == true
"true".to_boolean == true
"foo".to_boolean == true
"false".to_boolean == false
"TRUE".to_boolean == true
"FALSE".to_boolean == false
"0".to_boolean == false
"1".to_boolean == true
true.to_i == 1
false.to_i == 0
true
hayfalse
đủ nếu kết quả là true hoặc falsey? Nếu giá trị thứ hai, thìfalse
đã là false, và cả haitrue
và'true'
đều là true, vì vậy giá trị duy nhất mà kết quả chưa chính xác, là'false'
:if input == 'false' then true else input end
nên làm điều đó.