una palabras otra number muchas hoja contar concatenate concatenar como celdas and ruby code-formatting

ruby - palabras - Comprobando la cadena nula antes de concatenar



contar palabras en numbers (6)

Esta pregunta es similar a MUCHAS preguntas, pero de ninguna manera es un duplicado. Esta pregunta trata sobre la concatenación de cadenas y la escritura de un código mejor que de la comprobación de cero / cero.

Actualmente tengo:

file.puts "cn: " + (var1.nil? ? "UNKNOWN" : var1)

Lo que funciona bien, pero no se ve bien. ¿Cuál es la mejor manera de escribir esto en ruby ​​para que yo compruebe que no hay nada y no lo concatene?


Dado que la parte "cn: " es puramente estética y, por lo tanto (¿más?) Sujeta a cambios para cumplir con las futuras pautas de presentación, recomendaría usar join;

file.puts(["cn", (var1 || "UNKNOWN")].join(": ")

Tal vez como función, como se mencionó anteriormente, la semántica es la misma, solo los nombres de los métodos / palabras clave han cambiado;

def value_or_unknown(value, attribute = nil) [attribute, (value or "UNKNOWN")] * ": " end


Haría lo que Peter sugirió, asumiendo que false no era un valor válido para var1 , y var1 estaba garantizado como nil o una cadena. También puedes extraer esa lógica en una función:

def display_value(var) (var || "UNKNOWN").to_s # or (var.nil? ? "UNKNOWN" : var.to_s) if ''false'' is a valid value end file.puts "cn: " + display_value(var1)

to_s solo es necesario si var1 no garantiza ser nulo o una cadena. Alternativamente, si lo haces:

file.puts "cn: #{display_value(var1)}"

Hará un implícito to_s en el resultado de display_value


Puedes hacerlo:

file.puts "cn: " + (var1 || "UNKNOWN")

o, de forma idéntica si lo prefiere:

file.puts "cn: " + (var1 or "UNKNOWN")

o mi favorito, que creo que es el rubí más idiomático:

file.puts "cn: #{var1 or ''unknown''}"


Usando ruby ​​2.4.1, to_s resuelve tanto para nil como para "Hello" . Entonces var1.to_s debería ser suficiente.

2.4.1 :058 > nil.to_s => "" 2.4.1 :059 > "hello".to_s => "hello"


Utilice join para agregar las cadenas que pueden ser nil .

La join no se quejará si hay un nil

Por ejemplo:

["a","b",nil,"c"].join("") #=> abc

Sin embargo, si te estás uniendo con algo que no sea una cadena en blanco, como un guión bajo, obtendrás una cadena de unión para el valor nil :

["a","b",nil,"c"].join("_") #=> a_b__c

Para solucionar esto, use .compact para eliminar los valores nil de la Array antes de unirse:

["a","b",nil,"c"].compact.join("_") #=> a_b_c


file.puts( "cn:" + (var1 || "UNKNOWN" ))