相当于Ruby中的“pass”

时间:2012-11-19 11:14:52

标签: ruby keyword

在python中有一个pass关键字用于定义空函数,条件,循环,... Ruby有类似的东西吗?

Python示例:

def some_function():
    # do nothing
    pass

6 个答案:

答案 0 :(得分:51)

不,Ruby中没有这样的东西。如果你想要一个空块,方法,模块,类等,只需写一个空块:

def some_method
end

就是这样。

在Python中,每个块必需包含至少一个语句,这就是为什么你需要一个“假的”无操作语句。 Ruby没有语句,它只有表达式,并且块包含零表达式是完全合法的。

答案 1 :(得分:16)

nil可能相当于它:

def some_function
    nil
end

使用简单的单行语句忽略异常时,它基本上有用:

Process.kill('CONT', pid) rescue nil

而不是使用块:

begin
    Process.kill('CONT')
rescue
end

删除nil会导致语法错误:

> throw :x rescue
SyntaxError: (irb):19: syntax error, unexpected end-of-input
        from /usr/bin/irb:11:in `<main>'

备注:

def some_function; end; some_function返回nil

def a; :b; begin; throw :x; rescue; end; end; a;也会返回nil

答案 2 :(得分:11)

您始终拥有end个语句,因此不需要pass

Ruby示例:

def some_function()
    # do nothing
end

答案 3 :(得分:10)

单行功能和类

def name ; end

class Name ; end

适用于伪代码

如前所述,ruby中的所有内容都是表达式,因此可以将其保留为空白

def name
end

class Name
end

喜欢pass关键字的python程序员的红宝石替代

def pass
end

# OR

def pass; end

请注意,在Ruby中执行此操作是没用的,因为它允许使用空方法,但如果您热衷于pass,则这是最简单,最干净的选择。

现在您可以在任何中使用此功能,它也可以正常工作。

def name
   pass
end

# OR

class Name
   pass
end

请记住,pass是一个返回的函数,因此由您决定如何使用它。

答案 4 :(得分:0)

如果你想能够随意使用任意数量的参数,你必须在参数上有一个小技巧:

def gobble *args, &pr; end

答案 5 :(得分:0)

正如其他人所说,在Ruby中你可以将方法体留空。但是,这可能与Python使用pass完成的工作略有不同。

在Ruby中,一切都是对象。缺少值,一些编程语言用nullnil表示实际上是Ruby中NilClass的对象。

考虑以下示例(在irb中):

class A
  def no_op
  end
end

A.new.no_op
# => nil
A.new.no_op.class
# => NilClass
A.new.no_op.nil?
# => true

这里有Ruby的NilClass documentation供参考。

我相信Python的pass主要用于克服语言的语法限制(缩进),尽管我没有Python的经验。