Ruby 请教关于 Ruby 方法的一些问题

fenginsc · 2021年01月16日 · 最后由 fenginsc 回复于 2021年01月16日 · 541 次阅读

第一个问题,有如下方法,有两个参数且都设了默认值,有没有办法只传 y 的值但不传 x 的值的调用?

def test(x = 2,y = 3)
    return x + y
end

比如 test(y = 5) 我试了这样不对,会创建一个 y 的变量且值还是传给了 x。

第二个问题,lambda 表达式中的分号是什么意思?这个 y 没有任何作用?

f = -> (x;y) {x}
f.call 3

第三个问题,还是第一个问题的那个方法,执行以下语句返回 0 和 1 是什么意思?

test[0] == 1
test[1] == 0

求解不明白,网上关于这块的资料也比较少。

1.用 keyword parameter https://thoughtbot.com/blog/ruby-2-keyword-arguments 如下

def test(x: 2, y: 3)
  x + y
end

test(y: 5)

2.分号跟是否在 lambda 表达式里无关,就是分割语句用的。这个 y 没用

3.test[0] 看成两步处理

// 变量a等于test函数默认调用的结果即5
a = test
// 5的二进制是101所以5[0] == 1, 5[1] == 0, 5[2] == 1
a[0] == 1
a[1] == 0
a[2] == 1
  1. 用楼上提到的关键词参数。def test(x = 2, y = 3) 中的 x y 是位置参数。test(y = 5) 的执行逻辑是:y = 5 -> test(5) ,所以 x 是 5
  2. f = -> (x;y) {x} 中的分号是 block local variable 语法,我很少见到用这个的。In short, block local variables shield a block from manipulating variables outside of its scope. see here
  3. 楼上说了

明白了,谢谢各位大神的解答。

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