Ruby方法参数默认值的一个小技巧在Rails中的应用
来源:互联网 发布:淘宝注销店铺重新开店 编辑:程序博客网 时间:2024/05/20 17:09
我们需要生成一个gravatar格式的html.image标示,于是写了如下方法:
def gravatar_for(user) gravatar_id = Digest::MD5::hexdigest(user.email.downcase) gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}" image_tag(gravatar_url, alt: user.name, class: "gravatar") end
但是现在我们需要在生成image标示时可以定制图片大小,这里有几种方法,首先是用可选参数:
def gravatar_for(user,*args) size = args.first unless size.nil? //do some work endend
第二种是参数默认值:
def gravatar_for(user,size=40)end
但这里有一个问题,如果调用时未给size输入值,我们不希望使用40,而是gravatar_far逻辑不变.这里的关键是如何判断用户是否给size输入了值,我们不能仅仅 if size == 40,因为用户可能以40调用size.因为ruby的”最后表达式定值”的特性,我们可以这样写:
def gravatar_for(user,size=(flag=true,40)) gravatar_id = Digest::MD5::hexdigest(user.email.downcase) gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}" unless flag.nil? image_tag(gravatar_url, alt: user.name, class: "gravatar") else image_tag(gravatar_url, alt: user.name, class: "gravatar",size:size.to_s) end end
如果用户未指定size默认值,那么flag一定为nil,否则为true.
最后一种方式是使用hash,你大概不希望调用 gravatar_tag(user,120)时搞不清120表示的是神马!?所以你希望像swift语言那样带参数名称去调用,不过这里用hash来模拟也是绰绰有余了:
def gravatar_for(user,hash) size = hash[:size] //do some work...end
现在你可以这样调用了:
gravatar_for(user,size:100)
PS:ruby 2.x的命名参数特性我特地新开一篇blog介绍,请猛戳以下链接:
Ruby 2.x 命名参数特性简介
0 0
- Ruby方法参数默认值的一个小技巧在Rails中的应用
- 在Function中设置参数的默认值的小技巧
- ruby中Hash的默认值小陷阱
- [Ruby] ruby中的拟态方法的调用中的小细节
- 一个 Rails 表单样式设置的小技巧
- js方法参数的默认值
- Ruby on Rails 入门之:(11) Ruby中的类方法
- Ruby on Rails学习笔记(8)--ruby中的方法
- Ruby On Rails的一个简单实例
- 九个衡量 Rails 应用性能的小方法
- url参数转换为ruby对象时,rails框架使用的方法
- ruby的一些小技巧
- 矩阵在编程中的一个小应用
- Ruby on Rails,一个简单的CMS系统,创建应用骨架并与数据库连接
- Ruby on Rails 使用 Cookie 的方法
- ruby on rails 的数据库查询方法
- ruby on rails 的数据库查询方法
- Gem安装ruby rails 的方法
- 被玩坏的C程序控制台窗口
- Android开发中的日常
- 九度 oj 题目1084:整数拆分
- Android之GRADLE基础
- react环境配置
- Ruby方法参数默认值的一个小技巧在Rails中的应用
- 重拾java基础(十九):GUI简单使用总结
- 安卓笔记6
- linux opencv2.4.13安装
- UVa 11300
- 安卓笔记7
- Splay tree
- 串口网口16进制发送的和ASCII发送的区别
- 生命倒计时-倒数9107日