3

我是二郎的新手。我必须维护和实现一个用 erlang 构建的后端项目的新功能。我在 c/c++、php、ruby、python 和 javascript 方面有很强的背景。我在实现从电话号码列表中删除一些前缀的功能时遇到了问题

-module(reminder_group).
-export([address_with_no_prefix/1]).

-define(PREFIXES, [
    '855', 
    '+855', 
    '0', 
    '+0', 
    '+'
 ]).

address_with_no_prefix(Address) ->
  address_with_no_prefix(Address, ?PREFIXES).

address_with_no_prefix(Address, []) -> Address;

address_with_no_prefix(Address, Prefixes) ->
  [Prefix|H] =  Prefixes,
  Length = string:len(Prefix),
  AddressPrefix = string:substr(Address, 1, Length),

  if 
   Prefix == AddressPrefix -> 
     string:substr(Address, Length);
   true ->  
     address_with_no_prefix(Address, H)
end.

编译后我运行

reminder_group:address_with_no_prefix("0123445")

我收到以下错误:

1> reminder_group:address_with_no_prefix("0123445").
 ** exception error: bad argument
    in function  length/1
    called as length('855')
    in call from string:len/1 (string.erl, line 66)
    in call from reminder_group:address_with_no_prefix/2 (src/models/reminder_group.erl, line 34)

这似乎是 Length = string:len(Prefix) 的问题,但是我测试运行

string:len("855"). 

它适用于 3 的结果。我的字符串值列表有什么问题吗?请帮忙。

4

1 回答 1

3

您使用单引号(而不是双引号)来表示您的前缀。我假设您的意思是这些是字符串,而不是原子(因此应用string:len)?

您的测试有效,因为您正确地使用了双引号来构造字符串文字。

于 2014-07-08T04:21:51.657 回答