为什么回调在 Ruby on Rails 中使用符号

2024-03-27

我很难理解何时以及何时不应该在 Rails 中使用符号。我知道符号与没有许多方法的字符串并没有太大不同。我还知道这些符号是很好的键,因为同名的符号在内存中占据一个地址。

我很难理解为什么 Rails 决定在某些情况下使用符号。如果我有回调

before_action :ask_stack_overflow_question

def ask_stack_overflow_question
  puts "why did I just use a symbol?"
end

我不太明白为什么要把方法当作符号?为什么我需要保持方法不变?

我在文档中找不到任何答案。

谢谢


这并不像看起来那么棘手。

打电话时before_action您不希望立即执行该方法,但您必须描述您希望以某种方式执行的操作。这里用一个符号来表示name要调用的方法。

所以如果这被捕获为name,然后在代码中的某个地方,将其转换为send(name)在适当的时间。

这两者之间有很大的区别。立即版本是:

before_action method_name

其中有执行的效果method_name立即,因为 Ruby 将被迫运行method_name找出它返回的内容,然后将其传递给before_action作为一个论点。

推迟的约定是:

before_action :method_name

这只是一个礼貌的请求before_action,传入一个符号作为参数。你要把它留给before_action以它认为合适的方式处理这个问题,因此它将来可能会也可能不会执行该方法,这取决于情况。

这就是它在 Ruby 中的工作方式very很少有例外。我能想到的唯一一个在立即指定方法而不是作为代表性符号时不会立即执行方法的是古怪的alias构造。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么回调在 Ruby on Rails 中使用符号 的相关文章

  • Capistrano 杀死资产:预编译

    我正在尝试部署我的应用程序 但我不断收到 err xxx xxx xx xxx bash line 1 9953 Killed bundle exec rake RAILS ENV production RAILS GROUPS asset
  • Paperclip 会自动清理文件名吗?

    我正在使用 Thoughtbot回形针宝石 https github com thoughtbot paperclip处理文件上传 我发现当我上传文件名中包含空格的文件时 它会用下划线替换空格来存储 那挺好的 我还尝试上传带有特殊字符的文件
  • 如何使用键盘进入 ruby​​-debug 运行 Rails 应用程序?

    我正在运行 ruby debugbundle exec rdebug script server在 Rails 2 3 上 当我按下Ctrl C 它退出整个程序和调试器 我希望它停止执行程序并将我带入调试器会话 I tried catch
  • 回调和部分回发有什么区别?

    有区别吗 或者这些术语是同义词吗 抱歉 如果之前有人问过这个问题 我只能找到a之间的区别full回发和回调 我已经知道完整回发有何不同 在使用 ASP Net 2 0 时 如果这很重要的话 顺便问一下 这重要吗 或者这些术语对于任何基于 W
  • 您推荐使用哪些工具来分析 Rails 应用程序? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在寻找 Rails 的分析工具 我目前正在玩和测试 ruby prof 和 Railsbench 但我对使其工作所需的大量调整和修改
  • 如何让 Rails 资产管道生成源地图?

    我想让 Rails 与编译后的 CoffeeScript 缩小的 JS 一起生成源映射 以便更好地记录错误 不过 网上似乎还没有关于如何执行此操作的全面文档 有人这样做过吗 我使用 Rails 3 2 和 Heroku Rails 支持缩小
  • Eventbus onMessageEvent 没有被调用

    我已经在我的项目中实现了 EventBus 但我没有获得所有事件 public class MainActivity extends AppCompatActivity Override protected void onCreate Bu
  • 单表继承发现问题

    我有以下3个rails类 它们都存储在一张表中 使用rails的单表继承 class Template lt ActiveRecord Base class ThingTemplate lt Template class StockThin
  • 使用 bcrypt-ruby 使用版本 $2y 验证哈希密码

    我们陷入了困境 需要使用 Ruby 根据现有的用户数据库对用户进行身份验证 用户的密码都是使用password compat PHP库生成的 所有散列密码均以 2y 开头 我一直在使用 bcrypt ruby 尝试对用户进行身份验证 但没有
  • ActiveAdmin 使用 Devise Rails 登录两次

    我有一个Rails已设置使用的应用程序devise with User模型 我只是添加ActiveAdmin并且它使用单独的型号名称AdminUser 这个新模型也使用了设计 我遇到的问题是 当我去localhost 3000 admin
  • 如何使用 LDAP 进行 Ruby on Rails 身份验证? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个网络应用程序 并且我有一个使用的身份验证方法bcrypt gem它工作正常 但我想将身份验
  • 定制导轨配置部分

    为 Rails 应用程序创建自定义配置部分的最佳方法是什么 理想情况下 我希望最终结果是一个 api 调用 例如 Rails configuration foo bar Rails configuration foo baz e g Rai
  • 在初始化程序中重新加载命名空间常量

    今天遇到一个有趣的情况 我不确定如何解决 给定一个带有初始化器的 Rails 应用程序 file config initializers integrations rb Integrations CONFIGS key gt value f
  • env 配置文件中未初始化的常量 ActiveSupport::EventedFileUpdateChecker

    我是 Ruby on Rails 的新手 运行 捆绑 命令进行更新 安装后 当我尝试执行以下操作时rails s or rails g mongoid config控制台返回以下消息开头 home myUser proyect config
  • ruby中如何获取屏幕分辨率

    如何在ruby脚本中获取屏幕分辨率 高度 宽度 在 Linux 上 x y xrandr scan current d x d flatten 在 Windows 上 使用WIN32OLE等 http www ruby forum com
  • 测试驱动开发 - 我应该测试数据库列和索引吗?

    我是 TDD 新手 我发现shouldagem 能够测试数据库实体的列是否存在以及测试其索引 但是否有必要在我的测试套件中包含列和索引的测试 我是否需要担心在开发过程中可能会删除任何列和索引 不要测试数据库列 这只是测试实施 不要测试实现
  • Rails 资产 - 保留许可证注释

    如何防止 Uglifier 删除某些文件中的某些注释 我希望缩小和压缩代码 但我也希望许可注释保持不变 来自 uglifyJS 的文档 nc or no copyright 默认情况下 uglifyjs 将在生成的代码中保留初始评论标记 假
  • 在 Rails 上制作 ruby​​ 占用更少的内存

    我正在尝试运行 Ruby on Rails 项目 redmine http www redmine org 在 VPS 上 它可以工作 但需要相当多的内存 与 VPS 的其余部分相比 rails 应用程序的使用量非常少 我的服务器上也运行着
  • Rails-自定义删除前确认对话框的视图

    要删除 Rails 中的记录 我使用此代码 result of which I get dialog box like this But I wants this dialog box to look like this 有没有办法自定义确
  • Rails 建模:将 HABTM 转换为 has_many :through

    我正在现有的 Rails 站点上进行维护工作 并且遇到了一些由多对多关联引起的问题 看起来该网站最初是使用has and belongs to many对于一些业务逻辑变得更加复杂的关系 所以我需要使用has many through而是支

随机推荐

  • 与 Objective C 相比,Swift SHA256 加密返回不同的加密字符串

    我正在将一些代码从 Objective C 迁移到 Swift 我想在 swift 中使用 SHA 256 算法用密钥加密字符串 但与 Objective C 实现的 swift 代码相比 返回不同的加密字符串 两个代码看起来相同 只是语法
  • 自定义文件格式和编解码器?

    我已经被编解码器问题弄乱了好几天了 但仍然看不到全局 这是我第一次处理音频 视频格式和编解码器 所以我真的需要一些帮助 这是工作 我正在编写几个负责编码和解码自定义 mpeg 文件的组件 在标准解 压缩过程 对于音频和视频 之上 我将实现一
  • 使用假会话测试控制器

    我想为我的控制器编写测试 Result changeAction callAction controllers routes ref Users changePassword assertThat status changeAction i
  • 将 Xtext 与 StringTemplate 代码生成器链接

    在我当前的项目中 我试图链接用 xtext 编写的 DSL 规范和用 StringTemplate 编写的代码生成器 例如 我的 DSL 规范的语法如下 我通过 xText 提供的优秀编辑器工具输入此信息 structs TempStruc
  • 如何在WinRT下并行线程中执行C++函数?

    我有一个 C 代码 它使用 beginthreadex Windows 方法在线程中执行函数 现在我想将其移植到 WinRT 组件以将其包含在 Windows Phone 应用程序中 但Windows Phone不支持 beginthrea
  • 如何在 Excel VBA 中对字符串进行 URL 编码?

    是否有内置方法可以在 Excel VBA 中对字符串进行 URL 编码 或者我是否需要手动执行此功能 不 没有任何内置内容 直到 Excel 2013 看到这个答案 https stackoverflow com a 24301379 18
  • Java COM 桥

    我有一个超低延迟程序 需要与 Windows COM 组件交互 最快的方法是什么 使用像 JACOB 这样的 COM 桥或编写本机 COM 库并使用像 ZeroMQ 这样的消息总线发送消息 如果您使用 ZeroMQ 您将处理两个进程 将消息
  • 使用 Guid 和自定义表名称以及 Asp.net Identity 1.1 Alpha 创建自定义实现

    我从不同的问题中得出结论 在我提出问题时在下面列出 我想做五件事 据我从这些问题和答案中可以看出 所有这些都可以在我的 OnModelCreating 方法中完成 Preface 我正在使用 Asp Net Identity 1 1 alp
  • 叉子和线程有什么区别?

    谁能解释一下叉子和线程之间的区别 分叉给你一个全新的进程 它是当前进程的副本 具有相同的代码段 当内存映像发生变化时 通常这是由于两个进程的不同行为 您会分离内存映像 写入时复制 但可执行代码保持不变 任务不会共享内存 除非它们使用某些内存
  • 配置 Xcode 4 工作区以在需要时构建依赖项的正确方法是什么?

    我的情况很简单 一个工作区有两个兄弟项目 一个主 iOS 应用程序和一个构建该应用程序使用的多个静态库目标的项目 以下是我配置构建的方式 将主应用程序的构建设置中的 用户标题搜索路径 指向库项目位置 通过源树 在我的应用程序的主要目标的编辑
  • 如何将json数组插入mysql数据库

    您好 我正在尝试将 json 数组插入到我的 MySQL 数据库中 我正在从我的 iPhone 传递数据 我已将数据转换为 json 格式 并且使用未插入到我的服务器中的 url 将数据传递到我的服务器 这是我的 json 数据 姓名 0
  • SKshapenode 没有响应Physicsbody

    我创建了一个SKShapeNode我已经分配了一个physicsBody到它 然而 当有接触时它不会被触发 的制作SKShapeNode code SKShapeNode gravityline SKSpriteNode lolo SKSp
  • 堆积条形图上的R ggplot标签[重复]

    这个问题在这里已经有答案了 我需要将数据放入堆栈条形图中 但是当我添加计数标签时 一些标签位于类别上方 一些标签位于类别下方 我尝试修改 geom text 函数的位置参数但无济于事 下面是一个可重现的示例 显示了该类别上方 下方 类别座位
  • 如何使用 Pipeline 引用 Jenkinsfile 目录?

    我有一个 groovy 文件 我想从 Jenkinsfile 运行 ie load script groovy 但是 如果该文件与 Jenkinsfile 存储在同一目录中 我不确定如何引用该文件 我正在从 git 加载 Jenkinsfi
  • 使用 stripplot 在 seaborn 中用中线绘制点

    我在seaborn中有以下情节 df pandas DataFrame sample X X X Y Y Y value 0 2 0 3 0 4 0 7 0 75 0 8 rep a b c a b c plt figure ax sns
  • 在 HQL 或 Criteria 中获取 DATEPART?

    如何使用 HQL 或 Criteria 获取时间的 DATEPART 我用谷歌搜索并得到了一些提示 但还不够 如果有人以前经历过 请告诉我们 提前致谢 看看这篇关于在nhibernate中使用sql函数 http ayende com Bl
  • mySQL 每日从一个表备份到另一个表

    如果我有两个具有相同定义的表 我将如何每天备份其中的数据 我可以使用 mySQL Administrator 执行类似的操作吗 每天中午 12 00 将 main table 中的所有行复制到 backup table 如果是增量备份会更好
  • Android 上的辅助功能测试自动化

    我最近开始研究 Android 上的自动化辅助功能测试 网络上没有太多信息 有人探索过这个或者目前正在这样做吗 如果是这样 您能分享您的想法 方法吗 似乎 Android 的 uiautomator 依赖于辅助功能来工作 但它不支持测试辅助
  • FullCalendar:事件最初未从函数调用(AJAX)渲染

    我已将 FullCalendar 配置为从 AJAX 请求中提取其事件 但首次加载页面时它们不会在日历上呈现 document ready function sh1client new Array sh2client new Array s
  • 为什么回调在 Ruby on Rails 中使用符号

    我很难理解何时以及何时不应该在 Rails 中使用符号 我知道符号与没有许多方法的字符串并没有太大不同 我还知道这些符号是很好的键 因为同名的符号在内存中占据一个地址 我很难理解为什么 Rails 决定在某些情况下使用符号 如果我有回调 b