设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2123|回复: 5
打印 上一主题 下一主题

[已经解决] yield封裝問題

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

跳转到指定楼层
1
发表于 2018-1-4 18:38:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 chd114 于 2018-1-4 18:41 编辑

@RaidenInfinity

RUBY 代码复制
  1. def sum(base = 0)
  2.     (block_given? ? inject(base) { |a, e| a + yield(e) } : inject(base, :+))
  3. end

這部分是求和的腳本
我做了一個求平均的腳本
RUBY 代码复制
  1. def avg(base = 0)
  2.     if block_given?
  3.       marry=lambda {yield}
  4.       sum(base,&marry)/size
  5.     else
  6.       0
  7.     end
  8.     #block_given? ? sum(base)yield : sum(base)
  9.     #(self.sum base yield)/size
  10.     #n=base;collect{|s|n+=yield(s)};n/size
  11.     #(block_given? ? inject(base) { |a, e| a + yield(e) } : inject(base, :+))/size
  12.   end

但是&marry似乎封裝了沒有實際效果?
出現了ArgumentError wrong number of arguments(1 for 0)的錯誤
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21636
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

2
发表于 2018-1-4 22:46:51 | 只看该作者
marry 接收 0个参数,sum yield 它时传递了1个参数
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

3
 楼主| 发表于 2018-1-4 22:52:49 | 只看该作者
喵呜喵5 发表于 2018-1-4 22:46
marry 接收 0个参数,sum yield 它时传递了1个参数

那我這裡是不能用
  1. lambda {yield}
复制代码
嗎?還是要把block_given?改成其他條件?
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21636
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

4
发表于 2018-1-4 23:01:00 | 只看该作者
如果你坚持要用这种形式的话
lambda{|e| yield(e)}

不然(手机打字,未测试)
def avg(base = 0, &b)
    return 0 if size==0
    return sum(base,&b)/size
end

评分

参与人数 1+1 收起 理由
chd114 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

5
 楼主| 发表于 2018-1-4 23:14:12 | 只看该作者
喵呜喵5 发表于 2018-1-4 23:01
如果你坚持要用这种形式的话
lambda{|e| yield(e)}

第一個可行

反復試了一下有點懂了,不過表達不出來···

那具體來說這樣是做了什麼呢?

点评

二楼不就说了吗,sum会传递1个参数给代码块,你却传了个只允许接收0个参数的lambda,于是就报了参数个数不一致(1 for 0)的错误  发表于 2018-1-5 09:30
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-17 15:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表