54

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

蟒蛇示例:

def some_function():
    # do nothing
    pass
4

6 回答 6

61

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

def some_method
end

就是这样。

在 Python 中,每个块都必须包含至少一个语句,这就是为什么你需要一个“假”的 no-op 语句。Ruby 没有语句,只有表达式,块包含零表达式是完全合法的。

于 2012-11-19T11:37:07.347 回答
26

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

于 2014-07-05T04:25:25.157 回答
16

你总是有end陈述,所以pass不需要。

红宝石示例:

def some_function()
    # do nothing
end

红宝石 3​​.0

end从 Ruby 3.0 开始,现在支持所谓的“ less”方法定义——我们不再需要end每个方法定义都包含语句。这意味着像上面的例子这样表达空方法的最简洁的方式现在可以说是这样的:

def some_function = nil

或者,一直有一个使用令人讨厌的分号的更丑陋的单行选项:

def some_function; end

请注意,除了如何编写代码之外,这并没有真正改变第一个解决方案的任何内容。

于 2012-11-19T11:14:51.953 回答
11

单行函数和类

def name ; end

class Name ; end

适用于伪代码

正如之前回答的那样,ruby 中的所有内容都是一个表达式,因此可以将其留空

def name
end

class Name
end

喜欢 pass 关键字的 python 程序员的 ruby​​ 替代品

def pass
end

# OR

def pass; end

请注意,在 Ruby 中这样做是没有用的,因为它允许使用空方法,但如果您热衷于 Ruby pass,这是最简单和最干净的选择。

现在你可以在任何中使用这个函数,它的工作原理是一样的。

def name
   pass
end

# OR

class Name
   pass
end

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

于 2013-05-26T19:57:43.803 回答
0

如果您希望能够使用任意数量的参数自由地使用它,您必须对参数有一个小技巧:

def gobble *args, &pr; end
于 2012-11-19T16:53:23.390 回答
0

正如其他人所说,在 Ruby 中,您可以将方法体留空。但是,这可能与 Python 使用pass.

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

考虑以下示例(在 中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 文档供参考。

我相信 Python 的pass主要用途是克服语言的语法限制(缩进),尽管我在 Python 方面没有那么丰富的经验。

于 2017-02-15T14:40:34.193 回答