在python中有一个pass
关键字用于定义一个空函数,条件,循环,...是否有类似的Ruby?
Python示例:
def some_function():
# do nothing
pass
不,Ruby中没有这样的东西。如果你想要一个空块,方法,模块,类等,只需写一个空块:
def some_method
end
而已。
在Python中,每个块都需要包含至少一个语句,这就是为什么你需要一个“假的”无操作语句。 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
。
Ruby示例:
def some_function()
# do nothing
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中执行此操作是没用的,因为它允许使用空方法,但如果您热衷于pass
,则这是最简单,最干净的选择。
现在您可以在任何块内使用此功能,它将工作相同。
def name
pass
end
# OR
class Name
pass
end
请记住,pass是一个返回的函数,因此由您决定如何使用它。
如果你想能够自由地使用任意数量的参数,你必须在参数上有一个小技巧:
def gobble *args, ≺ end
正如其他人所说,在Ruby中你可以将方法体留空。但是,这可能与Python使用pass
完成的工作有点不同。
在Ruby中,一切都是对象。缺乏价值,一些编程语言用null
或nil
表示,实际上是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的经验。