可以不向对象发送任何内容吗?
让我详细说明一下.例如,我可以这样:
val = some_stack.include?(some_val) ? some_val : nil
obj1.obj2.send(val).obj3.obj4
Run Code Online (Sandbox Code Playgroud)
上面的调用不起作用,因为nil不是符号.所以解决方案是:
if val.nil?
obj1.obj2.obj3.obj4
else
obj1.obj2.send(val).obj3.obj4
end
Run Code Online (Sandbox Code Playgroud)
但是我不太喜欢这个.还有其他方法吗?
我不知道任何方法在self没有任何参数的情况下返回(但我可能会忽略某些东西),但是没有理由你不能将一个方法打包到你正在使用的类中:
irb(main)> class Object
irb(main)> def ignore
irb(main)> self
irb(main)> end
irb(main)> end
=> nil
irb(main)> msg = nil
=> nil
irb(main)> 'hi'.send(msg || :ignore).upcase
=> "HI"
irb(main)> msg = :reverse
=> :reverse
irb(main)> 'hi'.send(msg || :ignore).upcase
=> "IH"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1592 次 |
| 最近记录: |