1

我的 if 语句不起作用,想知道是否可以请一些帮助。我会输入“FnPrint”,我的 if 语句不起作用。

puts "hi"
g = gets()
# Class for print command
x = "FnPrint"
class Fnprint
  def Print
    if x = g
      puts "it worked"
    else
      puts "no"
    end
  end
end

Fnprint.new.Print

当我尝试运行它时,我一直得到这个:

lang.rb:9:in `Print': undefined local variable or method `g' for #<Fnprint:0x007f9379939040> (NameError)
from lang.rb:17:in `<main>'
4

5 回答 5

2

你在这里做了很多不正确的事情

1)不正确的比较运算符= 而不是==

2) 试图访问超出gx范围的变量。

3)您的方法名称是一个常量(在 Ruby 中,任何以大写字母开头的都是常量)。方法名称应全部小写,并_在多字的情况下用分隔。

class FnPrint
  def print(x)
    g = gets.strip
    if x == g
      puts 'it worked'
    else
      puts 'no'
    end
  end
end

fn_print_object = FnPrint.new
fn_print_object.print('FnPrint')
于 2013-10-29T09:40:44.853 回答
1

请使用以下内容:

if x == g

当你这样做时

if x = g

您只需告诉 ruby​​ 分配 to 的gx

您还试图访问Print方法范围之外的变量。请考虑重构您的代码,如下所示:

class FnPrint
  def print(x)
    if x == gets().strip
      puts "it worked"
    else
      puts "no"
    end
  end
end

puts "hi"
FnPrint.new.print('FnPrint')

要理解的几点:

  1. String#strip删除前导和尾随空格。
  2. 方法名应为小写
  3. 类名应为驼峰式 ( FnPrint, FooBar, Foo, ...)
  4. print是类的实例方法FnPrint
  5. FnPrint.new创建一个新的类实例,FnPrint以便您可以调用print
于 2013-10-29T09:37:04.163 回答
0
if x = g #=> is Assignment
if x == g #=> is Comparison
于 2013-10-29T09:37:53.867 回答
0

if x=g 分配 gx然后评估这是否真实。

if x == g评估是否xg相等.

你可能打算写这样的东西:

puts 'hi'
#
class Fnprint
  def print
    x = 'FnPrint'
    g = gets.strip
    if x == g
      puts 'it worked'
    else
      puts 'no'
    end
  end
end

Fnprint.new.print
于 2013-10-29T09:38:30.320 回答
0
if x=g

实际上是一个赋值,并将 g 的值返回给 if 语句。

使用比较运算符==

于 2013-10-29T09:38:33.793 回答