我想传递一个参数给一个只有预定义值的方法。Perl中的枚举或符号6
method send-http($url, $http_method) { .... }
我应该创建一个枚举通过$http_method
?如果是的话那怎么样?
或者Perl 6在Ruby中有类似符号的东西吗?
我想传递一个参数给一个只有预定义值的方法。Perl中的枚举或符号6
method send-http($url, $http_method) { .... }
我应该创建一个枚举通过$http_method
?如果是的话那怎么样?
或者Perl 6在Ruby中有类似符号的东西吗?
正如@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.
你是说你想限制'$ http_method'到'GET','HEAD','POST'等之一吗?我想你想要一个'枚举',但我没有看到传递一个简单的字符串的问题;你可以验证它是'send_http'里面一个测试中的有效选择之一。我不明白你为什么认为像Ruby符号这样的东西会有所帮助。符号的主要优点在于它们是不可变的,并且在比较中速度非常快,但是您可以轻易地错误地编写':GIT'或''GIT'',并且符号不会保护您免受该错误 – Borodin
@Borodin 。是。至少符号很快。我相信在Perl 6中必须有一些比字符串更适合的东西。 –
我仍然不明白你想要解决什么问题 – Borodin