我们需要生成一个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.firstunless size.nil?//do some workend
end

第二种是参数默认值:

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")elseimage_tag(gravatar_url, alt: user.name, class: "gravatar",size:size.to_s)endend

如果用户未指定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 命名参数特性简介

Ruby方法参数默认值的一个小技巧在Rails中的应用相关推荐

  1. java接口参数默认值_下面关于setMaxAge(int expires)方法参数默认值的描述中,正确的是(5.0分)_学小易找答案...

    [单选题]下面选项中,用于在web.xml中配置监听器的元素是(5.0分) [填空题]Cookie技术用于将会话过程中的数据保存到( )中,从而使浏览器和服务器可以更好地进行数据交互.(5.0分) [ ...

  2. android 方法参数默认值,Kotlin函数默认值的完全讲解

    函数默认值 周所周知,Java语言并不支持参数使用默认值.有人说这是因为"默认参数"和"方法重载"同时支持的话有二义性的问题,具体真正的原因我不得而知.但是对我 ...

  3. ES6函数参数的解构赋值,以及2种设置参数默认值方法的区别

    文章目录 1. 函数参数的解构赋值方式 2. 函数参数解构设置参数默认值 1. 方法1 2. 方法2 3. 总结 1. 函数参数的解构赋值方式 下面代码中,函数add的参数表面上是一个数组,但在传入参 ...

  4. C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)

    每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...

  5. ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map

    根据视频进行整理 [https://www.bilibili.com/video/BV1uK411H7on?p=1] 视频资源(百度网盘): 链接:[https://pan.baidu.com/s/1 ...

  6. JavaScript中实现函数重载和参数默认值

    2019独角兽企业重金招聘Python工程师标准>>> 参数默认值是指在调用函数时,若省略了某个实参,函数会自动为该参数分配一个默认值,使得函数调用的方便性和灵活性大大提高. 举个例 ...

  7. ES6: 参数默认值及中间域

    下午看了一章 ECMA-262 by Dmitry Soshnikov, 现在稍稍来小结下ES6中的参数默认值以及由此产生的参数中间作用域. 原文地址: http://dmitrysoshnikov. ...

  8. ES6:Rest 参数和参数默认值【转】

    Rest 参数 通常,我们需要创建一个可变参数的函数,可变参数是指函数可以接受任意数量的参数.例如,String.prototype.concat 可以接受任何数量的字符串作为参数.使用 Rest 参 ...

  9. ES6新特性之函数优化-参数默认值

    函数优化 在ES6中,对函数的操作做了优化,使得我们在操作函数时更加的便捷. 函数参数默认值 在ES6以前,我们无法给一个函数参数设置默认值,只能采用变通写法: function add(a , b) ...

最新文章

  1. 给现有MVC项目增加Web API支持
  2. excel之根据单元格内容自动修改单元格颜色
  3. mongodb视频教程云盘,深度讲解Java多线程开发—电子表项目实现
  4. vue中使用keepAlive组件缓存遇到的坑
  5. 深入理解脚本化CSS系列第五篇——动态样式
  6. AIdl server端监听client是否掉线
  7. linux的目录创建时间,LINUX下文件创建时间问题
  8. 调教 游戏java_如何优雅的调教Java(eclipse篇)(三)安装插件的崩溃瞬间代号(2599)...
  9. HR图像添加运动焦散模糊【Matlab】
  10. POI给word中插入图片后打不开的bug
  11. 程序员要不要懂底层原理
  12. 计算机对舞蹈影响,计算机技术在舞蹈教学中的应用
  13. Python 数据分析 —— Matplotlib ②
  14. 如何将html模板资源转为vuecli项目
  15. 【统计学】Python计算并绘制样本数据的经验分布函数
  16. 坐标系、欧拉角、旋转矩阵、四元数
  17. 带你玩转kubernetes-k8s(第38篇:深入分析集群安全机制)
  18. 【跟学C++】C++类与对象—构造函数—析构函数(Study10)
  19. 用5分、2分、1分硬币组成一元钱,共有多少方式?
  20. PS:金色哥特艺术文字

热门文章

  1. 计算机网络英语版答案,计算机网络试卷英语版
  2. 关于timestamp时间范围
  3. python中国社区-Python中文社区名称的统一
  4. 集运系统,集运下单系统,国际物流集运系统,转运系统源码 集运系统源码
  5. linux中来宾用户权限,linux权限分配
  6. 手机网页版JS压缩上传图片--base64位 兼容IOS和安卓
  7. xbox360使用_Xbox 360作为媒体中心
  8. 工程师成长知识图谱(书籍)
  9. 自建数据库MySQL和云数据库Rds MySQL的优缺点
  10. AI基础原理篇(一)