在 python 中有一个pass
关键字用于定义一个空函数、条件、循环,... Ruby 有类似的东西吗?
蟒蛇示例:
def some_function():
# do nothing
pass
不,Ruby 中没有这样的东西。如果您想要一个空块、方法、模块、类等,只需编写一个空块:
def some_method
end
就是这样。
在 Python 中,每个块都必须包含至少一个语句,这就是为什么你需要一个“假”的 no-op 语句。Ruby 没有语句,只有表达式,块包含零表达式是完全合法的。
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
。
你总是有end
陈述,所以pass
不需要。
红宝石示例:
def some_function()
# do nothing
end
end
从 Ruby 3.0 开始,现在支持所谓的“ less”方法定义——我们不再需要end
每个方法定义都包含语句。这意味着像上面的例子这样表达空方法的最简洁的方式现在可以说是这样的:
def some_function = nil
或者,一直有一个使用令人讨厌的分号的更丑陋的单行选项:
def some_function; end
请注意,除了如何编写代码之外,这并没有真正改变第一个解决方案的任何内容。
单行函数和类
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 是一个返回函数,因此如何使用它取决于您。
如果您希望能够使用任意数量的参数自由地使用它,您必须对参数有一个小技巧:
def gobble *args, ≺ end
正如其他人所说,在 Ruby 中,您可以将方法体留空。但是,这可能与 Python 使用pass
.
在 Ruby 中,一切都是对象。缺少值,某些编程语言用 Ruby 表示null
或nil
实际上是NilClass
Ruby 中的一个对象。
考虑以下示例(在 中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 方面没有那么丰富的经验。