ruby强制整数和字符串
我是鲁比新手 我试图编写一个非常简单的计算器,将数字存储在变量中,并检查运算符的用户输入是否包含在可能的运算符数组中,如果是,则应使用这些变量执行计算 有没有办法把这三个变量结合起来得到结果?现在正在向我抛出错误“字符串不能强制转换为整数”ruby强制整数和字符串,ruby,Ruby,我是鲁比新手 我试图编写一个非常简单的计算器,将数字存储在变量中,并检查运算符的用户输入是否包含在可能的运算符数组中,如果是,则应使用这些变量执行计算 有没有办法把这三个变量结合起来得到结果?现在正在向我抛出错误“字符串不能强制转换为整数” 您可以使用public\u send num1.public\u发送(op,num2) 但更明确的方法是只使用if/else语句 if op == "+" num1 + num2 elsif op == "-"
您可以使用
public\u send
num1.public\u发送(op,num2)
但更明确的方法是只使用if/else语句
if op == "+"
num1 + num2
elsif op == "-"
num1 - num2
elsif op == "*"
num1 * num2
elsif op == "/"
num1 / num2
end
您可以使用
public\u send
num1.public\u发送(op,num2)
但更明确的方法是只使用if/else语句
if op == "+"
num1 + num2
elsif op == "-"
num1 - num2
elsif op == "*"
num1 * num2
elsif op == "/"
num1 / num2
end
使用对象#发送方法
您当前的代码无法工作,因为您试图将op(当前为字符串)附加到整数。实际上,您要做的是通过向第一个整数发送适当的消息来调用该方法,并将第二个数字作为参数传递给该方法。您可以通过以下方式执行此操作:
print "Enter a number: "
num1 = Integer gets
loop do
print "Enter an operator: "
op = gets.strip
break if %w[+ - / *].include? op
end
print "Enter another number: "
num2 = Integer gets
p num1.send(op, num2)
撇开其他修改和重构不谈,正是使用了#send才允许这种方法工作。当然,还有很多其他方法可以表示您正在尝试执行的操作,但这一种方法确实有效。使用Object#send方法
您当前的代码无法工作,因为您试图将op(当前为字符串)附加到整数。实际上,您要做的是通过向第一个整数发送适当的消息来调用该方法,并将第二个数字作为参数传递给该方法。您可以通过以下方式执行此操作:
print "Enter a number: "
num1 = Integer gets
loop do
print "Enter an operator: "
op = gets.strip
break if %w[+ - / *].include? op
end
print "Enter another number: "
num2 = Integer gets
p num1.send(op, num2)
撇开其他修改和重构不谈,正是使用了#send才允许这种方法工作。当然,还有很多其他方法可以表示您正在尝试做的事情,但这一种方法确实有效。让我们将您的示例分解为更简单的内容:
num1 = 1
num2 = 2
op = '+'
result = num1 + op + num2
当您尝试分配结果时,实际发生的情况如下:
result = 1 + '+' + 2
Ruby reports字符串无法强制转换为整数,因为它正在尝试将字符串+
添加到整数1
中,而Ruby无法将字符串添加到整数中。您可以在上阅读更多关于此的信息
您可以用一个更简单的例子来重现它:
1 + '+'
TypeError: String can't be coerced into Integer
if operators.include?(op)
result = num1.public_send(op, num2)
else
puts "enter a valid operator"
end
在您的问题中,您说它应该使用这些变量执行计算,因此我假设您期望结果
等于3
。(因为它应该根据这三个变量计算1+2
)由于上述原因,result=…
行中不会出现这种情况
正确的方法是使用public\u send
,如以下关于堆栈溢出的问题和答案所述:
因此,答案是:
num1.public_send(op, num2)
=> 3
并集成到您的示例中:
1 + '+'
TypeError: String can't be coerced into Integer
if operators.include?(op)
result = num1.public_send(op, num2)
else
puts "enter a valid operator"
end
让我们将您的示例分解为更简单的内容:
num1 = 1
num2 = 2
op = '+'
result = num1 + op + num2
当您尝试分配结果时,实际发生的情况如下:
result = 1 + '+' + 2
Ruby reports字符串无法强制转换为整数,因为它正在尝试将字符串+
添加到整数1
中,而Ruby无法将字符串添加到整数中。您可以在上阅读更多关于此的信息
您可以用一个更简单的例子来重现它:
1 + '+'
TypeError: String can't be coerced into Integer
if operators.include?(op)
result = num1.public_send(op, num2)
else
puts "enter a valid operator"
end
在您的问题中,您说它应该使用这些变量执行计算,因此我假设您期望结果
等于3
。(因为它应该根据这三个变量计算1+2
)由于上述原因,result=…
行中不会出现这种情况
正确的方法是使用public\u send
,如以下关于堆栈溢出的问题和答案所述:
因此,答案是:
num1.public_send(op, num2)
=> 3
并集成到您的示例中:
1 + '+'
TypeError: String can't be coerced into Integer
if operators.include?(op)
result = num1.public_send(op, num2)
else
puts "enter a valid operator"
end
您可以使用a代替if
/elsif
来避免重复比较。您可以使用a代替if
/elsif
来避免重复比较。不太清楚“组合”是什么意思。您对num1=1
、op=“+”
和num2=2
的预期结果是什么?字符串“1+2”
或整数3
?不太清楚“组合”是什么意思。您对num1=1
、op=“+”
和num2=2
的预期结果是什么?字符串“1+2”
或整数3
?