在python中有一个pass关键字,用于定义空函数、条件、循环...... Ruby中有类似的东西吗?Python示例:
pass
def some_function(): # do nothing pass
yrdbyhpb1#
不,Ruby中没有这样的东西。如果你想要一个空块、方法、模块、类等等,只要写一个空块:
def some_method end
就这样了在Python中,每个块都必须包含至少一个语句,这就是为什么你需要一个“假的”no-op语句。Ruby没有语句,它只有表达式,一个块不包含表达式是完全法律的的。
f87krz0w2#
nil可能是它的等价物:
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。
def some_function; end; some_function
def a; :b; begin; throw :x; rescue; end; end; a;
uelo1irk3#
您总是有end语句,因此不需要pass。Ruby示例:
end
def some_function() # do nothing end
Ruby 3.0As of Ruby 3.0, so-called " end less" method definitions are now supported--我们不再需要在每个方法定义中都使用end语句。这意味着现在可以用最简洁的方式来表达一个空方法,比如上面的例子:
def some_function = nil
或者,总是有一个更丑陋的单行选项,使用非常讨厌的分号:
def some_function; end
请注意,除了编写代码的方式之外,这实际上并没有改变第一个解决方案的任何内容。
vq8itlhq4#
单行函数和类
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是一个返回的函数,因此如何使用它完全取决于您。
bxfogqkk5#
如果你想在任意数量的参数下自由地使用它,你必须在参数上有一个小技巧:
def gobble *args, ≺ end
mzillmmw6#
正如其他人所说,在Ruby中,你可以只将方法体留空,然而,这可能与Python使用pass所实现的有点不同。在Ruby中,所有的东西都是一个对象,缺少值,一些编程语言用null或nil表示,在Ruby中实际上是NilClass的一个对象。请考虑以下示例(在irb中):
null
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没有那么丰富的经验。
amrnrhlw7#
Ruby中与pass等价的可以是()。第一个您也可以将它用作condition ? true-expr : false-expr三元运算符的一部分。
()
condition ? true-expr : false-expr
7条答案
按热度按时间yrdbyhpb1#
不,Ruby中没有这样的东西。如果你想要一个空块、方法、模块、类等等,只要写一个空块:
就这样了
在Python中,每个块都必须包含至少一个语句,这就是为什么你需要一个“假的”no-op语句。Ruby没有语句,它只有表达式,一个块不包含表达式是完全法律的的。
f87krz0w2#
nil
可能是它的等价物:当使用简单的一行语句忽略异常时,它基本上是有用的:
不使用块:
删除
nil
将导致语法错误:备注:
def some_function; end; some_function
会传回nil
。def a; :b; begin; throw :x; rescue; end; end; a;
也会传回nil
。uelo1irk3#
您总是有
end
语句,因此不需要pass
。Ruby示例:
Ruby 3.0
As of Ruby 3.0, so-called "
end
less" method definitions are now supported--我们不再需要在每个方法定义中都使用end
语句。这意味着现在可以用最简洁的方式来表达一个空方法,比如上面的例子:或者,总是有一个更丑陋的单行选项,使用非常讨厌的分号:
请注意,除了编写代码的方式之外,这实际上并没有改变第一个解决方案的任何内容。
vq8itlhq4#
单行函数和类
对伪代码工作正常。
正如前面所回答的,ruby中的所有内容都是一个表达式,因此可以将其留空。
为喜欢pass关键字的python程序员提供的ruby替代方案
请注意,在Ruby中这样做是无用的,因为它允许空方法,但如果您对
pass
非常感兴趣,这是最简单、最干净的选择。现在你可以在任何块中使用这个函数,它的工作原理是一样的。
请记住,pass是一个返回的函数,因此如何使用它完全取决于您。
bxfogqkk5#
如果你想在任意数量的参数下自由地使用它,你必须在参数上有一个小技巧:
mzillmmw6#
正如其他人所说,在Ruby中,你可以只将方法体留空,然而,这可能与Python使用
pass
所实现的有点不同。在Ruby中,所有的东西都是一个对象,缺少值,一些编程语言用
null
或nil
表示,在Ruby中实际上是NilClass
的一个对象。请考虑以下示例(在
irb
中):下面是Ruby的NilClass documentation作为参考。
我相信Python的
pass
主要是用来克服语言的语法限制(缩进),尽管我对Python没有那么丰富的经验。amrnrhlw7#
Ruby中与
pass
等价的可以是()
。第一个
您也可以将它用作
condition ? true-expr : false-expr
三元运算符的一部分。