如何绕过 ruby if else 语句中的范围约定
How to bypass scope convention in ruby if else statements
这显示了一个错误,因为 ruby 范围规则阻止我访问 if else 块内的外部变量。
puts "Enter Line 1 m and c:"
m1 = gets.to_f
c1 = gets.to_f
puts "Enter Line 2 m and c:"
m2 = gets.to_f
c2 = gets.to_f
if ((m1==m2) and (c1==c2))
puts "infinite solutions"
elsif ((m1==m2) and (c1!=c2))
puts "no solution"
else
x = (c1 - c2)/(m2 - m1)
y = m1*x + c1
puts "(x,y) = (" + x + "," + y+")"
end
你能告诉我解决这个错误的方法吗?
更新:
实际上我得到的错误是:
未定义的局部变量或方法 'c1'
对于 main:Object 来自 :7
来自 C;/Ruby200-x64/bin/irb:12;在 ''
使用 interpolation 摆脱它。
puts "(x,y) = (#{x}, #{y})"
您试图连接 String
对象与Float
对象。这是不可能的,因此您必须在 concatenation.
之前将那些 Float
转换为 String
对象
修改后的代码:
puts "Enter Line 1 m and c:"
m1 = gets.to_f
c1 = gets.to_f
puts "Enter Line 2 m and c:"
m2 = gets.to_f
c2 = gets.to_f
if m1 == m2 and c1 == c2
puts "infinite solutions"
elsif m1 == m2 and c1 != c2
puts "no solution"
else
x = (c1 - c2)/(m2 - m1)
y = m1*x + c1
puts "(x,y) = (#{x}, #{y})"
end
输出
[arup@Ruby]$ ruby a.rb
Enter Line 1 m and c:
14
21
Enter Line 2 m and c:
12
44
(x,y) = (11.5, 182.0)
[arup@Ruby]$
它不会阻止你访问外部变量,你看到的错误是:
`+': no implicit conversion of Float into String (TypeError)
这是完全不同的,与变量可见性范围无关。错误是说你不能总结 String
和 Float
(在控制台中尝试 'a' + 1.0
)。
要修复它,您应该自己将变量转换为字符串:
puts "(x,y) = (" + x.to_s + "," + y.to_s + ")"
或使用interpolation(更可取):
puts "(x,y) = (#{x}, #{y})"
这显示了一个错误,因为 ruby 范围规则阻止我访问 if else 块内的外部变量。
puts "Enter Line 1 m and c:"
m1 = gets.to_f
c1 = gets.to_f
puts "Enter Line 2 m and c:"
m2 = gets.to_f
c2 = gets.to_f
if ((m1==m2) and (c1==c2))
puts "infinite solutions"
elsif ((m1==m2) and (c1!=c2))
puts "no solution"
else
x = (c1 - c2)/(m2 - m1)
y = m1*x + c1
puts "(x,y) = (" + x + "," + y+")"
end
你能告诉我解决这个错误的方法吗?
更新:
实际上我得到的错误是: 未定义的局部变量或方法 'c1' 对于 main:Object 来自 :7 来自 C;/Ruby200-x64/bin/irb:12;在 ''
使用 interpolation 摆脱它。
puts "(x,y) = (#{x}, #{y})"
您试图连接 String
对象与Float
对象。这是不可能的,因此您必须在 concatenation.
Float
转换为 String
对象
修改后的代码:
puts "Enter Line 1 m and c:"
m1 = gets.to_f
c1 = gets.to_f
puts "Enter Line 2 m and c:"
m2 = gets.to_f
c2 = gets.to_f
if m1 == m2 and c1 == c2
puts "infinite solutions"
elsif m1 == m2 and c1 != c2
puts "no solution"
else
x = (c1 - c2)/(m2 - m1)
y = m1*x + c1
puts "(x,y) = (#{x}, #{y})"
end
输出
[arup@Ruby]$ ruby a.rb
Enter Line 1 m and c:
14
21
Enter Line 2 m and c:
12
44
(x,y) = (11.5, 182.0)
[arup@Ruby]$
它不会阻止你访问外部变量,你看到的错误是:
`+': no implicit conversion of Float into String (TypeError)
这是完全不同的,与变量可见性范围无关。错误是说你不能总结 String
和 Float
(在控制台中尝试 'a' + 1.0
)。
要修复它,您应该自己将变量转换为字符串:
puts "(x,y) = (" + x.to_s + "," + y.to_s + ")"
或使用interpolation(更可取):
puts "(x,y) = (#{x}, #{y})"