Upcase方法不返回upcased字符串

时间:2016-06-01 17:52:54

标签: ruby

我在这些简单的Ruby测试中一直都是假的:

def large(string)
  if string.size > 20
    puts string.upcase!
  else
    puts string
  end
end

试验:

p large("Hola vamos a la comida") == "HOLA VAMOS A LA COMIDA"
p large("Es hora de dormir") == "Es hora de dormir"

使它们有效需要什么?

2 个答案:

答案 0 :(得分:4)

puts打印其参数,但返回值始终为nil

> val = (puts "Hello World")
Hello World
=> nil
> val
=> nil

在您的代码中,large的返回值始终为零,因此与string的比较始终返回false

这可能更接近你想要的东西:

def large(string)
  if string.size > 20
    string.upcase!
  else
    string
  end
end

答案 1 :(得分:0)

puts在屏幕上打印并返回nil。 Ruby中的nilfalse在布尔上下文中是false。其他一切都是true。因此,您的方法large会返回nil。你应该像这样写

def large(string)
    if string.size > 20
        string.upcase!
    else
        string
    end
end

更好的方法是

def large(string)
  string.size > 20 ? string.upcase : string
end