我有一个函数,接收一个字符串列表,并将每个字符串连接到一个新的字符串中,我使用Enum.join来实现这一点。但是,当我尝试这个操作时,我会得到以下错误:
** (Protocol.UndefinedError) protocol Enumerable not implemented for "int main(){return 2;}" of type BitString. This protocol is implemented for the following type(s): Date.Range, File.Stream, Function, GenEvent.Stream, HashDict, HashSet, IO.Stream, List, Map, MapSet, Range, Stream我的方法是尝试将BitString转换成一个字符串,但是我在Elixir的文档中找不到任何可以这样做的东西。我的另一个解决方案是根本不想得到那个BitString,但我甚至不知道为什么我要先得到那个BitString。
我正在做的过程是接收这样一个列表:[{"int main(){return 2;}", 1}],然后我创建一个列表,但只使用字符串text=Enum.map(words, fn {string, _} -> string end)
我试着打印结果,所以我确信我给出了正确的参数;通过使用IO.inspect(text),我得到了["int main(){return 2;}"],它看起来像一个字符串列表。
然后我使用Enum.flat_map(text, &lex_raw_tokens(&1, line))将其传递给一个函数。
在这个函数中,我做def lex_raw_tokens(program,line) when program != "" do textString=Enum.join(program, " ")
这就是我得到错误的地方。有没有办法将那个BitString转换回字符串,或者没有得到那个BitString?
对不起,我还在学药,老实说,这是我学过的最神奇的药了,而且我有很多麻烦。而且,这整件事是我作为一个学校工程师做的一个小型C编译器的一部分
发布于 2020-03-17 22:31:51
text绑定到["int main(){return 2;}"],然后在text上执行Enum.flat_map/2,所以在lex_raw_tokens/2内部,program绑定到"int main(){return 2;}"。然后您尝试在Enum.join/2上执行program,但是由于它是一个字符串(它是一种BitString),所以它是不可枚举的。
https://stackoverflow.com/questions/60731018
复制相似问题