Có cách nào sạch để chuyển đổi đúng -> 1 và sai -> 0 hơn phải dùng đếnChuyển đổi boolean để nguyên trong elixir
if boolean_variable do
1
else
0
end
Có cách nào sạch để chuyển đổi đúng -> 1 và sai -> 0 hơn phải dùng đếnChuyển đổi boolean để nguyên trong elixir
if boolean_variable do
1
else
0
end
Tôi không nhận thức được tích hợp sẵn trong chức năng chuyển đổi cho việc này. Làm thế nào bạn xây dựng giải pháp của riêng bạn phụ thuộc vào những gì bạn muốn đạt được. Xem xét thực hiện của bạn:
def boolean_to_integer(bool) do
if bool, do: 1, else: 0
end
Nếu bạn nhớ rằng tất cả các giá trị ngoại trừ nil
và false
đánh giá để true
trong bối cảnh của một biểu thức điều kiện, điều này có hiệu lực thi hành mà
iex> boolean_to_integer(0)
1
Nếu điều này là một vấn đề , bạn có thể sử dụng hàm đa khoản chỉ chấp nhận booleans:
def boolean_to_integer(true), do: 1
def boolean_to_integer(false), do: 0
iex> boolean_to_integer(0)
** (FunctionClauseError) no function clause matching in MyModule.boolean_to_integer/1
iex:42: MyModule.boolean_to_integer(0)
Tất nhiên, bạn có thể sử dụng xu hướng này theo ý thích của bạn, ví dụ để chấp nhận số nguyên 0
và 1
cũng như nil
bạn có thể làm:
def boolean_to_integer(true), do: 1
def boolean_to_integer(false), do: 0
def boolean_to_integer(nil), do: 0
def boolean_to_integer(1), do: 1
def boolean_to_integer(0), do: 0
iex> boolean_to_integer(0)
0
iex> boolean_to_integer(1)
1
Bạn có thể rút ngắn nó bằng cách sử dụng cú pháp sau, nhưng vì không có toán tử bậc ba rõ ràng trong ngôn ngữ, nếu macro vẫn được yêu cầu.
if boolean_variable, do: 1, else: 0
Nguồn: Elixir quick reference
bạn cũng có thể làm 'boolean_variable && 1 || 0'. Không chắc chắn nếu t sạch hơn mặc dù :) –
Bạn không có nghĩa là tất cả mọi thứ nhưng 'nil' và' false' đánh giá để 'đúng'? –
Có, tôi làm ;-) Cảm ơn –