我是Elixir的新手并试图从函数中随机收到一封信。
我尝试定义一个在a和z之间返回一个随机字母的函数。
由于某种原因,这有时会返回一个空白字符。 为什么呢?
defp random_letter do
"abcdefghijklmnopqrstuvwxyz"
|> String.split("")
|> Enum.random
end
def process do
Enum.each(1..12, fn(number) ->
IO.puts random_letter
end)
end
输出:
g
m
s
v
r
o
m
x
e
j
w
答案 0 :(得分:2)
String.split("abcdefghijklmnopqrstuvwxyz", "")
返回
["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", ""]
查看列表中的最后一个元素,得到答案:)
为避免这种情况,您可以使用trim
选项,如下所示:
String.split("abcdefghijklmnopqrstuvwxyz", "", trim: true)
答案 1 :(得分:0)
如果要分割字符串,可以使用以下两种方法。当你有Unicode字符串时使用第二个。
iex(1)> String.codepoints("abcdefghijklmnopqrstuvwxyz")
["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p",
"q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
iex(2)> String.graphemes("abcdefghijklmnopqrstuvwxyz")
["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p",
"q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
或者您可以使用
iex(1)> <<Enum.random(?a..?z)>>
"m"