ruby – 在表达式上调用’puts’来改变它的解释方式?
发布时间:2020-12-17 03:47:01 所属栏目:百科 来源:网络整理
导读:我刚遇到一个问题,函数返回的值是不同的,这取决于我是否对该结果调用puts.我想知道这是否是预期的,或某种解析器错误. 只有传递给函数的块使用do … end语法而不是内联{…}语法时才会出现这种情况.这是一个例子: arr = ["a","b","c"]puts i = arr.index { |x
我刚遇到一个问题,函数返回的值是不同的,这取决于我是否对该结果调用puts.我想知道这是否是预期的,或某种解析器错误.
只有传递给函数的块使用do … end语法而不是内联{…}语法时才会出现这种情况.这是一个例子: arr = ["a","b","c"] puts i = arr.index { |x| == "b" } #=> 1 正如所料,但这并不像我预期的那样有效: arr = ["a","c"] puts i = arr.index do |x| x == "b" end #=> #<Enumerator:0xSomeId> 虽然如果我这样做它可以正常工作: arr = ["a","c"] i = arr.index do |x| x == "b" end puts i #=> 1 看起来它被解释为好像没有传递任何块(返回枚举器是使用块调用arr.index的预期行为).这是正常的吗?这种行为是在任何地方解释/记录的 解决方法
do … end blocks与最左边的方法关联,而{…}块与最右边的方法关联,由于优先级.在你的第二个例子中,块与puts相关联,它对它没有任何作用.
在这种情况下,这似乎是奇怪的行为,但这就是do … end block的这个特性,它为Ruby DSL提供了清晰,可读的语法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容