【发布时间】:2015-01-31 02:45:28
【问题描述】:
当记录具有特定字段时,我需要返回 true 的函数,反之亦然。 示例:
-record(robot, {name,
type=industrial,
hobbies,
details=[]
}).
Crusher = #robot{name="Crusher", hobbies=["Crushing people","petting cats"]}.
SomeFunction(Crusher, hobbies). %% returns true
SomeFunction(Crusher, fantasy). %% returns false
对不起我的英语。 这是我大学的函数式编程练习。它是为 Lisp 编写的,这里有简单的解决方案。但对我来说,这是 Erlang 的要求。非常感谢您的帮助。我写了一些丑陋的功能。这不是我第一个问题的解决方案。我的老师就够了。
searchArray(_, []) -> false;
searchArray(X, [X|_]) -> true;
searchArray(X, [_|T]) -> searchArray(X, T).
existField(Field) ->
searchArray(Field, record_info(fields, robot)).
我也认为,地图在这里更有用。
【问题讨论】:
-
记录就像一个宏,它们被转换为元组,因此您无法在运行时检查字段的存在(但在编译时您可以通过将记录视为自己的类型来检查某些内容)。记录不是 Perl/Python/Ruby 中的“哈希”或“字典”。相反,您可以使用 {Key,Value} 类型并检查特定键。但我认为这是一个 X-Y 问题。你想在程序中做什么?可能有更好的方法来处理您的一般问题,从程序架构中的更高级别开始,而不是让您了解这种特定的技术细节。
标签: erlang field exists records