Ruby Ruby 没有提供 ++ -- 操作符感觉会大大影响书写性

lilijreey · 2018年10月15日 · 最后由 sevk 回复于 2018年11月05日 · 2148 次阅读

当我希望更新一个值但是检测该值的旧值时,如果没有++,--操作符会写的很麻烦,大家有什么好办法没有

#本来可以这样写
break if str[v++] != 3

#但是现在需要这样
if str[v] != 3
 v++
 break
else
 v++

酱紫如何:

break if str[v] != 3; v += 1

这些年的语言,都在避免 ++ --,比如 Swift、Rust,Go 虽然有,但是也有人提议在 Go 2 删掉,用 var += 1 写法代替,当然不同意的人也有很多

这种写法和在 if 语句中赋值一样,非常容易产生误解,万一产生 bug,要排查好久,最关键的是会坑后来读代码的人。

不要追求代码的简短,要追求可读性。

我一直觉得 if a = b 这种写法不好。

因为 Ruby 里很少需要用到++?一般都交给循环来做了。

要骚操作完全可以

break if str[v.tap{v += 1}] != 3

当然 confuse 的程度是一样的

++ -- 完全就是垃圾中的垃圾

现在的这些语言从本质上说。其实根本没有++ --的操作。。。本质是对象。。其实是先创建一个新的对象。然后将旧的对象指向新的对象(((。。。。而 C 的++ -- 是直接改变内存里的值。。

变量本身是不可变的。变量可变只是实现了一种语法糖(

同意 #8 同学,今天看书有看到,Ruby 里的整数是立即值 (immediate value),当一个整数被赋值给变量时,比如 x=1,x 持有的是 1 这个值本身,而不是地址的引用,如果这时候再写y=1,x 和 y 指向的是同一个对象1,而这时候x++就相当于1++,会把唯一的1对象变成2,这样就不合理了。简而言之他们是不可变的,所以也就没有前后加减运算符了。另,Symbol 也是如此。

你把上下文拿出来吧,一般都有更简便的写法,并不需要 ++ -- 的

break if str[v+=1] != 3

不是可以吗

v+=1

v-+1

需要 登录 后方可回复, 如果你还没有账号请 注册新账号