如何在Ruby中的类中使用if语句?

时间:2013-10-29 09:35:43

标签: ruby class if-statement

我的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>'

5 个答案:

答案 0 :(得分:2)

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

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

2)尝试访问超出班级范围的vaiables 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')

答案 1 :(得分:1)

请使用以下内容:

if x == g

当你做

if x = g

您只需告诉ruby将g的值分配给x

您还尝试从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. 班级名称应该是附加的(FnPrintFooBarFoo,...)
  4. print是类FnPrint
  5. 的实例方法
  6. FnPrint.new创建一个新的类FnPrint实例,以便您可以在其上调用print

答案 2 :(得分:0)

if x = g #=> is Assignment
if x == g #=> is Comparison

答案 3 :(得分:0)

if x=g assigns gx,然后评估这是否真实。

if x == g评估xgequal

你可能想写这样的东西:

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

答案 4 :(得分:0)

if x=g

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

使用比较运算符==