输入数字时,它不会打印出给定值的任何字符串。如果我输入100,不应该打印“去服务器机房”?
stress = gets.chomp!
def stress
if stress === 100
p "Go to server room"
elsif stress > 50
puts "Take a break"
else
p "Continue working"
end
end
p stress
答案 0 :(得分:2)
如果我输入100,不应该打印"去服务器房间"?
我假设您希望程序读取用户输入,然后根据输入打印不同的消息。
[我是#Ruby]的新手
好的,首先,Ruby不会像JavaScript或PHP那样进行隐式类型转换。或者不是相同的程度。它允许您比较浮点数和整数:
1.0 == 1 #=> true
但是比较字符串和整数并不是那样的:
'1' == 1 #=> false
你必须自己转换它:
'1'.to_i == 1 #=> true
由于您的输入应该是一个整数,我们可以立即转换它:
stress = gets.to_i
输入 1 0 0 输入时,gets
将返回"100\n"
并且to_i
会将其解释为整数,返回100
(to_i
会忽略尾随换行符,因此我们不需要chomp
)。
stress
现在是一个整数,因此您可以将其与其他整数进行比较:
if stress == 100
puts "Go to server room"
elsif stress > 50
puts "Take a break"
else
puts "Continue working"
end
我已将===
更改为==
。对于比较,你几乎总是想要后者。 ===
在Ruby中具有特殊含义。现在就避开它。
上面的代码已经可以使用了,但你想要一个方法。您可以调用您的方法stress
,即为变量和方法使用相同的名称。但它使你的代码很多更难理解。因此,让我们选择不同的方法名称,例如message
。虽然我们正在使用它,但我们也会删除重复的puts
次调用,因此只返回消息而不打印它:
def message(stress)
if stress == 100
"Go to server room"
elsif stress > 50
"Take a break"
else
"Continue working"
end
end
您可以通过以下方式调用上述方法:
input = gets.to_i
puts message(input) # <- 'puts' is now here
我故意为输入选择了一个不同的变量名,以区别于方法参数。
答案 1 :(得分:0)
您的变量和方法定义具有相同的名称。尝试更改:
stress = gets.chomp!
到
var = gets.chomp!
然后设置您的方法以接受变量:
def stress(s)
if s.to_i == 100
p "Go to server room"
elsif s.to_i > 50
puts "Take a break"
else
p "Continue working"
end
end
p stress(var)
你也可以接近你正在做的事情,只使用你方法名称以外的变量:
var = gets.chomp!
def stress
if self.to_i == 100
p "Go to server room"
elsif self.to_i > 50
puts "Take a break"
else
p "Continue working"
end
end
p var.stress
答案 2 :(得分:0)
这里有一些问题。首先,正如已经提到的那样,你没有向你的方法传递参数。另一方面,gets
方法返回一个String,而不是一个整数,因此如果传递结果,则将String与整数进行比较。
像这样重写你的方法:
def stress(level_string)
level = level_string.to_i
if level == 100
"Go to server room"
elsif stress > 50
"Take a break"
else
"Continue working"
end
end
现在你可以尝试:
>> level_string = gets.chomp!
>> 100
#> "100"
>> stress(level_string)
#> "Go to server room"
答案 3 :(得分:0)
在你的陈述中
p stress
输出名为stress的变量的值,而不是方法压力返回的值。
您可以拥有一个同名的方法和变量,但是您必须使用括号调用该方法:
p stress()
在您的特定情况下,您会遇到下一个问题:在方法 stress
内,您处于嵌套范围内,这意味着外部的变量 stress
不可见。因此,在声明中
if stress === 100
你指的是方法压力,即你有一个递归。
有几种可能的解决方案:
根据经验,我建议
除非你有充分的理由不这样做。