Blog do TaQ

Named parameters

Publicado em Developer

Estava fuçando aqui com Lisp e cheguei na parte de named parameters. Algo mais ou menos assim:

[taq@~]clisp
[1]> (defun foo (&key a b c) (list a b c))
FOO
[2]> (foo)
(NIL NIL NIL)
[3]> (foo :a 1)
(1 NIL NIL)
[4]> (foo :a 1 :b 2)
(1 2 NIL)
[5]> (foo :a 1 :b 2 :c 3)
(1 2 3)
[6]> (foo :b 2 :c 3 :a 1)
(1 2 3)
[7]> (foo :c 3 :a 1 :b 2)
(1 2 3)

Aí fiquei pensando em como fazer isso em Ruby e acabei achando essa discussão sobre o assunto, onde o próprio Matz posta algum código de um rascunho do que podem ser os named parameters no Ruby 2.

Mas enquanto isso não sai oficialmente, dá para usar como:

[taq@~]irb
irb(main):001:0> def foo(p={}) 
irb(main):002:1>    puts "a:#{p[:a]} b:#{p[:b]} c:#{p[:c]}"
irb(main):003:1> end
=> nil
irb(main):004:0> foo
a: b: c:
=> nil
irb(main):005:0> foo :a => 1
a:1 b: c:
=> nil
irb(main):006:0> foo :a => 1, :b => 2
a:1 b:2 c:
=> nil
irb(main):007:0> foo :a => 1, :b => 2, :c => 3
a:1 b:2 c:3
=> nil
irb(main):008:0> foo :b => 2, :c => 3, :a => 1
a:1 b:2 c:3
=> nil
irb(main):009:0> foo :c => 3, :a => 1, :b => 2
a:1 b:2 c:3
=> nil
irb(main):026:0>

Que é uma forma comum de enviar parâmetros no Rails.


Tags:


Comentários

Sem nenhum comentário.

comments powered by Disqus

Twitter