如何在 Ruby 中编写条件 lambda?

Cis*_*tin 1 ruby syntax lambda functional-programming

我想用 Ruby 编写一个条件 lambda。我想写的 Python 等效项是:

even = (lambda x: x if x % 2 == 0 else 0)
Run Code Online (Sandbox Code Playgroud)

我尝试用 Ruby 编写此代码,如下所示:

even = -> (x) {x if x % 2 == 0 else 0}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用。有没有什么办法解决这一问题?

tad*_*man 5

您在这里有多种选择来表达这一点。长形式是这样的:

if (x % 2 == 0)
  x
else
  0
end
Run Code Online (Sandbox Code Playgroud)

请注意,尾随的iforunless不能有像 之类的次要条件else。您需要使用完整的表格。

如果你想要一个简短的版本,你可以使用三元运算符

(x % 2 == 0) ? x : 0
Run Code Online (Sandbox Code Playgroud)

你还可以做的是:

(x % 2 == 0) and x or 0
Run Code Online (Sandbox Code Playgroud)

正如其他人所观察到的,有一个名为的方法even?可以为您进行取模,因此可以进一步崩溃:

x.even? ? x : 0
Run Code Online (Sandbox Code Playgroud)