Ruby dúvida simples. String -> Comando // Comando -> String

M@D

Power Member
Boas pessoal
Estou a ver se aprendo Ruby para criar um site e estava a percorrer Learn Ruby the Hard Way... estava no ex39 e pensei tentar fazer um programa com um método que quando alguém pretende escrever uma linha de código, tipo
Código:
puts "Hello World"
na linha de comando da powershell apareceria Comando: puts "Hello World" seguido de Hello World.

Esta foi a primeira tentativa de resolver:

Código:
stuff = {'name' => 'M@D', 'age' => 18, 'height' => 170}

def printcommand(command)
    puts "Comando: puts #{command}"
    puts command
end

printcommand(stuff['age'])

Pretendia que o resultado fosse-> Comando: puts stuff['age'] mas em vez disso aparecia - >Comando: 18.

Pensei então converter o
Código:
stuff['age']
para string e logo fazer:
Código:
printcommand("stuff['age']")
e isso resolveu o problema ou seja -> Comando: puts stuff['age']. Contudo fiquei com o problema que depois ao tentar colocar o
Código:
puts command
aparecia a string -> stuff['age'].
Insisti umas quantas vezes em tentar retirar os "" da string até que percebi que eles não faziam parte dela (yah fui um pouco parvo xd).

Tentei ainda:
Código:
puts "Comando: puts #{/command}"
mas deu-me erro:
Código:
ex39.rb:6: syntax error, unexpected end-of-input, expecting tSTRING_DEND
#puts stuff['age'] => 18


Existe alguma forma de das duas umas: tornar o
Código:
"stuff['age']"
em
Código:
stuff['age']
, ou então de fazer o
Código:
puts "Comando: puts #{command}"
dar em -> Comando: puts stuff['age'] em de vez de ->Comando: puts 18 ?
 
Última edição:
A tua dúvida não é assim tão simples. Estás a transformar um exercício trivial de funcionamento de hashes numa tarefa muito mais complexa de metaprogramação. O exercício 39 (se é deste que estás a falar) pede para imprimir chaves e valores da hash, não o nome de uma variável. Não faço ideia de como fazer o segundo em Ruby, mas o primeiro é muito fácil. Tens algo como isto:

Código:
stuff = {'name' => 'M@D', 'age' => 18, 'height' => 170}

e queres imprimir algo como:

The age is 18.

em que passas 'age' como parâmetro para a função. Ou então usas o 'each' para imprimir todos, isso já é um detalhe. Imprimir ou trabalhar com o próprio nome da variável (stuff['age']) em geral não é necessário e é mais complicado.

EDIT: Um exemplo do que estás a tentar fazer:

http://stackoverflow.com/questions/2603617/ruby-print-the-variable-name-and-then-its-value

Mas isto é mais hardcore. Ainda pensei que fosse plausível com um título como "Learn Ruby the Hard Way", mas não é o que eles pedem.
 
A tua dúvida não é assim tão simples. Estás a transformar um exercício trivial de funcionamento de hashes numa tarefa muito mais complexa de metaprogramação. O exercício 39 (se é deste que estás a falar) pede para imprimir chaves e valores da hash, não o nome de uma variável. Não faço ideia de como fazer o segundo em Ruby, mas o primeiro é muito fácil. Tens algo como isto:

Código:
stuff = {'name' => 'M@D', 'age' => 18, 'height' => 170}

e queres imprimir algo como:



em que passas 'age' como parâmetro para a função. Ou então usas o 'each' para imprimir todos, isso já é um detalhe. Imprimir ou trabalhar com o próprio nome da variável (stuff['age']) em geral não é necessário e é mais complicado.

EDIT: Um exemplo do que estás a tentar fazer:

http://stackoverflow.com/questions/2603617/ruby-print-the-variable-name-and-then-its-value

Mas isto é mais hardcore. Ainda pensei que fosse plausível com um título como "Learn Ruby the Hard Way", mas não é o que eles pedem.

Sim eu gerei confusão ao por isso do Learn Ruby the Hard Way, a única coisa que tem a ver com o exercício é mesmo ter usado uma hash :p

Isto foi uma coisinha de que me lembrei que teria piada e senti-me um pouco como o Neo, meti-me numa coisa que não esperava, deep down the rabbit hole, à medida que ia tentando resolver o problema mais complexo parecia ficar. Vou deixar isto e prosseguir com o resto dos exercícios, por a carroça à frente dos bois é um costume meu :bigrinbo:
(de qualquer forma vou investigar isso no stackoverflow embora vá parecer chinês provavelmente).

Thanks for the help!
 
Ah ok, então era mesmo de propósito. Acho ótimo teres essa atitude, aprende-se muito com essas brincadeiras. Em linguagens dinâmicas é relativamente simples fazer esse tipo de programação, vê por exemplo aqui:

http://rubylearning.com/blog/2010/11/23/dont-know-metaprogramming-in-ruby/

Ou procura por metaprogramming em ruby no google. Em Ruby não tenho experiência nenhuma, mas em Python já tenho usado para resolver problemas específicos. Mas se estás a aprender para fazer um site em princípio não vais precisar. Eu gosto de usar apenas quando me parece mesmo boa ideia, porque pode tornar-se (desnecessariamente) complexo e dificulta o debugging.
 
Back
Topo