【发布时间】:2012-02-26 02:32:48
【问题描述】:
在编写 ruby 时,我总是发现自己在这样做:
a = [a, b].min
这意味着比较a 和b 并将最小值存储在a 中。我不喜欢写上面的代码,因为我必须写两次a。
我知道 C++ 的一些非标准方言有一个操作符正是这样做的
a <?= b
我觉得这很方便。但我对运算符的兴趣并不像我对 避免重复的功能 那样感兴趣。如果我能写我也很高兴
a.keep_max(b)
a 可以是一个很长的变量,比如my_array[indice1][indice2],你不想写两次。
我对此做了很多谷歌搜索,但没有找到任何结果,希望这个问题会弹出并对其他人有用。
那么,有没有什么非重复的方式可以用 ruby 表达我想要的东西?
【问题讨论】:
-
IMO 重新绑定值(没有很好的理由这样做)是一个糟糕的选择,只需创建一个具有不同名称的新变量。想一想:现在
a的值为 2,现在一些魔法,a的值为 1……那种代码更难理解和调试。但是,当然,我是一个功能性偏执狂;-) -
@tokland,也许是的。但是对于典型的动态编程代码,比如 floyd-warshall,您通常会完全按照我所说的去做。毕竟,所有的任务都是命令式语言的力量。
-
很公平,当您在命令式循环中时,您别无选择,只能重用变量名(我猜该算法的功能实现在 Ruby 中可能效率低下)。我的笔记只是为了防止懒惰的编码,因为它重用了变量名。
-
@tokland,是的。你说的完全正确。我是 haskell 的粉丝,但我相信作业并不总是邪恶的!此外,ruby 并不是主要为功能风格而设计的(afaik)。
标签: ruby variable-assignment max assignment-operator min