@xds2000 开了一个 issue 看看
所以绝对不去什么外包公司...
@luikore 不知道你又没看过 wat 那个视频,同样的代码在 1.8 下正常,在 1.9 下就会发生问题, 里的解释是会触发 irb 内部的问题,所以搞的很困惑
@sailtsao - - 哪个。。。
@sailtsao 我用无形参的函数覆写有形参的 为啥要调用有形参的? 如果你说的情况会调用 method_missing,那么
[1] pry(main)> def self.method_missing(*args)
[1] pry(main)* puts args.join(' ')
[1] pry(main)* end
=> nil
[2] pry(main)> xx oo
oo
xx
=> nil
[3] pry(main)> def x(name);end
=> nil
[4] pry(main)> def x;end
=> nil
[5] pry(main)> x('abc')
ArgumentError: wrong number of arguments (1 for 0)
from (pry):6:in `x'
如何解释?这里明显没有触发 method_missing
@sailtsao 如http://stackoverflow.com/questions/9491462/why-do-i-get-stack-level-too-deep-from-method-missing-in-irb-1-9-3 Defining it as a top-level method replaces BasicObject#method_missing, which probably affected some irb internals like Phrogz said. 这是一个 irb 内部的设计问题
@sailtsao 当然不是
[jasl@localhost:~]$ pry
[1] pry(main)> def x(name);end
=> nil
[2] pry(main)> def x;end
=> nil
[3] pry(main)> x
=> nil
@aisensiy http://ruby-china.org/topics/7966 已经发完了亲~好几天前就在造势了
刚送了 30 个三个月 coupon 出去。。。话说我自己的话基本只看 asciicasts 的 视频比较费时间
@luikore 大神有想法么?
@jjym 没参数怎么了?函数体里用不到 name 自然不需要参数嘛
@liuhui998 重新发送了,代码忘了加换行
@sundevilyang 一共有 41 人报名,除去第一波的 23 人,我从剩下的人中随机抽取了七人 把剩下的 coupon 发出去了
@ugoa 你重现一下看看抛得是什么异常。。。是ArgumentError
你的 eval 根本就没执行到,如果栈溢出是抛SystemStackError
@jasonchi 因为我把活动举办的时间调到今天了 - -
@sailtsao 嗯,这样可以了,但是重载一般函数是不需要形参一致的吧?method_missing 是特殊么?
@ugoa 你说的不对 你可以在 irb 下发现(1.9.3)
1.9.3-p327 :002 > def method_missing;end
=> nil
1.9.3-p327 :003 > xx
(irb):2:in `method_missing': wrong number of arguments (1 for 0) (ArgumentError)
from /Users/jasl/.rvm/scripts/irbrc.rb:32:in `initialize'
from /Users/jasl/.rvm/scripts/irbrc.rb:32:in `open'
from /Users/jasl/.rvm/scripts/irbrc.rb:32:in `block in <top (required)>'
(irb):2:in `method_missing': wrong number of arguments (1 for 0) (ArgumentError)
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:800:in `identify_identifier'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:731:in `block in lex_int2'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/slex.rb:236:in `call'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/slex.rb:236:in `match_io'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/slex.rb:75:in `match'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:286:in `token'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:262:in `lex'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:233:in `block (2 levels) in each_top_level_statement'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `loop'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `block in each_top_level_statement'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `catch'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `each_top_level_statement'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb.rb:155:in `eval_input'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb.rb:70:in `block in start'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb.rb:69:in `catch'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/irb.rb:69:in `start'
from /Users/jasl/.rvm/rubies/ruby-1.9.3-p327/bin/irb:16:in `<main>'
在 pry 下发现
[1] pry(main)> def method_missing;end
(pry) output error: #<ArgumentError: wrong number of arguments (1 for 0)>
[2] pry(main)> xxx
CodeRay::Scanners::Scanner::ScanError:
***ERROR in scanner.rb:200:in `rescue in tokenize': wrong number of arguments (1 for 0) (after 0 tokens)
tokens:
current line: 1 column: 1 pos: 0
matched: nil state: "Error in CodeRay::Scanners::Ruby#scan_tokens, initial state was: :initial"
bol? = true, eos? = false
surrounding code:
nil ~~ "xxx"
***ERROR***
from (pry):1:in `method_missing'
这个应该是和 ruby 的词法分析或者对象模型有关,具体的没深入研究过
@jasonchi 因为那里最开始的逻辑是为线下活动设计的 举办日期之前可以 join,当天可以 attend,以后就没了。。和线上这种发福利的节奏不太一样。。。
@limkurn 你应该没在最开始 join 成功的 23 人里,我在后台看到你了,等周五吧
@sundevilyang um。。。 总之我周五把剩下的 7 个名额发出去。。。。 评论里的人我没法获得 email 地址所以。。。
你的那种在 1.8 时是没问题的,在 1.9 会崩掉
def self.method_missing; evil; end;
即可
@sundevilyang 友言的话 我没法获得 email 的 所以我修改了活动的时间 周五之前都可以 join 已经报名的都发送出去了,如果没收到可能需要检查一下 垃圾邮件
另外 邮件的发送脚本很简单
# encoding: UTF-8
require 'net/smtp'
from = "[email protected]"
password = "******"
mails = %w( )
coupons = %w( )
msg = [ "Subject: RailsCasts 3 months coupon\n", "\n", "Enjoy!\n" ]
Net::SMTP.start( 'smtp.126.com', 25, "126.com", from, password, :login ) do |smtp|
mails.each_with_index do |to, i|
coupon = coupons[i]
content = [ "Form: #{{from}}"
"To: #{to}\n",
"Subject: RailsCasts 3 months coupon\n",
"\n",
"#{coupon}",
"Enjoy!",
]
smtp.sendmail( content, from, to )
printf "#{coupon} - #{to} done.\n"
end
end
@yedingding 来开吧!
同收到 email,有没有一起去的?3 人以上有 25% 折扣
@bhuztez 信号量是 Unix 搞出来的吧 win 又不需要必须遵循 Posix 标准 不过 win 有 Posix 子系统 默认不安装但是 而且 win8 以后就被废弃