2012-05-12 32 views
26

Por ejemplo:¿Qué significa "<< -" en Ruby?

code = <<-EOH 
    bundle install 
    bundle exec unicorn -c /etc/unicorn.cfg -D 
EOH 

¿Qué hace este código? ¿Cómo se llama <<-?

+5

Symbolhound es una manera de buscar sintaxis que Google no puede manejar. –

Respuesta

34

Se llama heredoc. Una manera fácil de definir cadenas de varias líneas que pueden incluir comillas simples o dobles sin necesidad de escapar de ellas.

Ver más here, por ejemplo.

A menudo se utiliza heredocs para definir grandes trozos de código. Some los editores saben sobre esto y pueden resaltar la sintaxis para usted allí (si especifica el idioma). Mira:

strings vs heredocs

+0

Me gusta resaltar la sintaxis y aprendí hoy también esa primera vez. –

2

Me parece que heredoc. El - permite que el delimitador final ignore los espacios en blanco antes de él.

Una simple búsqueda en Google me dio this.

+1

Heredocs * sería * un dolor para google. El concepto y la implementación son extraños si nunca los has visto antes. –

+0

Nunca había oído hablar de heredoc, así que google fue infructuoso. A veces es difícil poner nombres a símbolos desconocidos – fontno

+0

A '<< - END' en bash/shell eliminará el espacio en blanco anterior, pero en Ruby no es tan simple, veré mi respuesta con los cambios en 2.3.x que trajeron un bit de paridad de características mientras requiere una nueva sintaxis. – dragon788

0

Puede pasar varios comandos en un bloque de este tipo en Chef Receta

bash 'Install ftppwd' do 
    code <<-EOH 
    mkdir #{ftppwd_dir} 
    chmod 775 #{ftppwd_dir} 
    chgrp #{batch_id} #{ftppwd_dir}/* 
    chown #{batch_id} #{ftppwd_dir}/* 
    EOH