2015-06-24 15 views

Trả lời

8

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ừ nilfalse đá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 01 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 
+1

Bạn không có nghĩa là tất cả mọi thứ nhưng 'nil' và' false' đánh giá để 'đúng'? –

+0

Có, tôi làm ;-) Cảm ơn –

3

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

+0

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ù :) –

Các vấn đề liên quan