2015-10-03 40 views
3

我想传递一个参数给一个只有预定义值的方法。Perl中的枚举或符号6

method send-http($url, $http_method) { .... } 

我应该创建一个枚举通过$http_method?如果是的话那怎么样?

或者Perl 6在Ruby中有类似符号的东西吗?

+0

你是说你想限制'$ http_method'到'GET','HEAD','POST'等之一吗?我想你想要一个'枚举',但我没有看到传递一个简单的字符串的问题;你可以验证它是'send_http'里面一个测试中的有效选择之一。我不明白你为什么认为像Ruby符号这样的东西会有所帮助。符号的主要优点在于它们是不可变的,并且在比较中速度非常快,但是您可以轻易地错误地编写':GIT'或''GIT'',并且符号不会保护您免受该错误 – Borodin

+0

@Borodin 。是。至少符号很快。我相信在Perl 6中必须有一些比字符串更适合的东西。 –

+0

我仍然不明白你想要解决什么问题 – Borodin

回答

4

正如@Christoph提到的,你可以使用枚举:

enum Method <GET PUT POST>; 
sub http-send(str $url, Method $m) { * } 

http-send("http://url/", GET); 

您还可以使用类型约束:

sub http-send(str $url, str $m where { $m ∈ <GET HEAD POST> }) { * } 

http-send("http://url/", 'GET'); 

http-send("http://url/", 'PUT'); 
Constraint type check failed for parameter '$m' 

我猜你也可以使用多分派:

multi sub http-send('GET') { * } 
multi sub http-send('PUT') { * } 
multi sub http-send($m) { die "Method {$m} not supported." } 

http-send('GET'); 

http-send('POST'); 
Method POST not supported. 
+0

'∈'是什么,我该如何输入? –

+0

什么是∈,我怎么输入它? –

+1

'ε'是unicode符号ELEMENT OF 您还可以输入德州变体,它是'(elem)' – donaldh