আমি কারও জন্য এটি এখানে রেখে দেবো আশা করি সত্যিকারের বুদ্ধিমান সংস্করণটি বের করা উচিত। এই মুহুর্তে গুগলে আসার কোনও ভাল উত্তর নেই ...
defmodule Util do
def typeof(self) do
cond do
is_float(self) -> "float"
is_number(self) -> "number"
is_atom(self) -> "atom"
is_boolean(self) -> "boolean"
is_binary(self) -> "binary"
is_function(self) -> "function"
is_list(self) -> "list"
is_tuple(self) -> "tuple"
true -> "idunno"
end
end
end
সম্পূর্ণতার জন্য, পরীক্ষার কেসগুলি:
cases = [
1.337,
1337,
:'1337',
true,
<<1, 3, 3, 7>>,
(fn(x) -> x end),
{1, 3, 3, 7}
]
Enum.each cases, fn(case) ->
IO.puts (inspect case) <> " is a " <> (Util.typeof case)
end
প্রোটোকল সহ একটি সমাধান এখানে; তারা দ্রুততর কিনা তা আমি নিশ্চিত নই (আমি নিশ্চিত আশা করি তারা সমস্ত ধরণের উপর কোনও লুপ করছে না) তবে এটি বেশ কুৎসিত (এবং ভঙ্গুর; তারা যদি কোনও মৌলিক প্রকার বা নাম পরিবর্তন করে তবে তা এটি ভেঙে যাবে)।
defprotocol Typeable, do: def typeof(self)
defimpl Typeable, for: Atom, do: def typeof(_), do: "Atom"
defimpl Typeable, for: BitString, do: def typeof(_), do: "BitString"
defimpl Typeable, for: Float, do: def typeof(_), do: "Float"
defimpl Typeable, for: Function, do: def typeof(_), do: "Function"
defimpl Typeable, for: Integer, do: def typeof(_), do: "Integer"
defimpl Typeable, for: List, do: def typeof(_), do: "List"
defimpl Typeable, for: Map, do: def typeof(_), do: "Map"
defimpl Typeable, for: PID, do: def typeof(_), do: "PID"
defimpl Typeable, for: Port, do: def typeof(_), do: "Port"
defimpl Typeable, for: Reference, do: def typeof(_), do: "Reference"
defimpl Typeable, for: Tuple, do: def typeof(_), do: "Tuple"
IO.puts Typeable.typeof "Hi"
IO.puts Typeable.typeof :ok