mixin 是否应该对其包含类做出假设?

2024-02-24

我找到了一个 mixin 的示例,它对包含类具有哪些实例变量进行假设。像这样的事情:

module Fooable
  def calculate
    @val_one + @val_two
  end
end

class Bar
  attr_accessor :val_one, :val_two
  include Fooable
end

我找到了支持和反对这是否是一个好的做法的论据。显而易见的选择是通过val_one and val_two作为参数,但这似乎并不常见,并且拥有更多参数化方法可能是一个缺点。

关于 mixin 对类状态的依赖是否存在传统观点?从实例变量读取值与将它们作为参数传递的优点/缺点是什么?或者,如果您开始修改实例变量而不是仅仅读取它们,答案会改变吗?


在模块中假设包含/前置它的类的一些属性根本不是问题。通常都是这样做的。事实上,Enumerable模块假设包含/前置它的类有一个each方法,并且有许多依赖于它的方法。同样,Comparable模块假设包含/前置类具有<=>。我无法立即给出实例变量的示例,但在这一点上,方法和实例变量之间没有重大区别;对于实例变量也应该这样说。

不使用实例变量传递参数的缺点是您的方法调用将变得冗长且不太灵活。

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

mixin 是否应该对其包含类做出假设? 的相关文章

  • ruby 的 String .hash 方法如何工作?

    我只是红宝石的新手 我见过一个字符串方法 String hash 例如 在irb 我试过了 gt gt mgpyone hash returns gt 144611910 这个方法是如何工作的 The hash方法是为所有对象定义的 看文档
  • 如何在 gem 的示例脚本中使用 pry-byebug ?

    我正在制作我的第一个 gem 它不是 Rails 应用程序 而是一个带有一些 AI 的 tic tac toe 库 这样我就可以与一个永远不会输的计算机对手比赛 并在可能的情况下强行获胜 现在我正在尝试调试人工智能中的攻击策略 但我似乎无法
  • 使用复选框过滤列表

    我有一个电影列表及其评级 在我的页面顶部 我有一个表单 其中提供了一个复选框列表 其中显示了每个可用的评级 G PG 13 等 一旦用户单击复选框并点击提交 我只想显示所选的电影 在我的索引方法中 我有一个名为的实例变量 filtered
  • RSpec 请求规范发布一个空数组

    我目前正在 Rails 中开发 API 端点 如果我需要的数据无效 我想确保端点响应具有正确的错误状态 我需要一个 id 数组 无效值之一是空数组 Valid vendor district ids 2 4 5 6 Invalid vend
  • 下载所有 gems 依赖项

    我想通过下载任何所需的文件并将它们带到另一台计算机来安装指南针没有互联网连接 我已经下载了指南针的源包 当我在未连接的计算机上运行 gem 时 它抱怨缺少依赖项 有什么解决办法吗 这正是我遇到的问题 经过一段时间的搜索后 我找到了一个可以使
  • Ruby gem 环境问题 - LoadError: no such file to load -- robots

    我正在尝试使用 anemone gem 编写一个爬虫 这需要 robots gem 不管出于什么原因 机器人绝对不会包括在内 这是我的一些环境信息 gem list d robots LOCAL GEMS robots 0 10 1 Aut
  • 需要野科切吗?没有要加载的文件

    我正在尝试开始使用 Nokogiri 我运行了命令 gem install nokogiri 作为 Windows 7 64 位 中的管理员 控制台显示 已成功安装 和 已安装 1 个 gem 当我输入时 gem list local OR
  • 用于在运行时使用附加信息增强 Java 中现有数据结构的设计模式

    我将从一个小例子开始 想象一个具有几个实体的应用程序 实体A 1 n gt 实体B 1 n gt 实体C 假设我们有一个返回 EnityC 实例列表的服务方法 在 UI 中 我们想要显示 EntityC 但也向仅与 UI 相关的实体添加一些
  • 将“Authorization Bearer”哈希添加到 Net::HTTP post 请求 (Ruby)

    我怎样才能添加Authorization Bearer到 POST 请求Net HTTP 我只能在文档中找到 基本身份验证 的帮助 req basic auth user pass Source https docs ruby lang o
  • 如何加载 UrlHelper 和 Rails 中的路线?

    我想包括路线和link toPORO 中的方法 在控制台中测试这个时 我遇到了这个 如果我在没有路由助手的情况下包含 UrlHelper 一切似乎都工作正常 ruby 1 9 3 rc1 001 gt Rails version gt 3
  • 带有 @global gem 的 Ruby/RVM - 捆绑包运行失败并显示“require”:无法加载此类文件 - 捆绑器 (LoadError)

    我学习了linux 1个月 当我试图使所有步骤从在 Heroku 上从 MySQL 迁移到 Postgres https devcenter heroku com articles heroku mysql我遇到了一个无法处理的错误 当我尝
  • 生成源映射时出错 - grunt 和 sass 配置

    我正在尝试将 sass 与 grunt 一起使用 我已经在我的路径中安装了 ruby sass 和 grunt 版本是 节点 0 10 20npm 11 3 1grunt cli 0 1 13咕噜声 0 4 5萨斯 3 4 4 我的包 js
  • 使用 Mechanize (Ruby) 进行基本身份验证和表单身份验证

    我正在尝试登录公司内部网上的一个站点 该站点具有基本身份验证弹出对话框和基于表单的身份验证 这是我正在使用的代码 导致 401 gt Net HTTPUnauthorized 错误 require rubygems require mech
  • 通过 SSL 发布 UTF-8 时,HEROKU 上出现“EOFError:已到达文件结尾”

    我在 heroku 上遇到了奇怪的错误 为了重现它 我必须使用请求正文中的任何 UTF 8 字符制作大的 超过几 KB HTTPS POST 这是一个例子 require net https require uri Accutally I
  • 启动同一作业的多个延迟作业进程

    我在运行多个工作人员的设置中使用延迟作业 就我的问题而言 这并不重要 但假设我运行 10 个工作线程 当前在开发模式下执行此操作 我遇到的问题是两个不同的工作人员有时开始处理同一项工作 调用我的工作对象上的执行方法 据我所知 延迟作业正在使
  • ruby中如何将binary32转换为float

    我有一个以 IEEE 32 编码的 binary32 如何将 0x0040EDC2 转换为 118 625 我尝试了几种打包和解包选项 但没有成功 IEEE http en wikipedia org wiki Single precisi
  • RSpec 2 中使用 OR 相等

    下面这个例子的正确写法是什么 玩家的分数应等于 5 或 8 it should equal 5 or 8 do player score should 5 or 8 end Thanks Tim 5 or 8将始终产生结果 5 并且不会执行
  • Rails 递归地包含 javascripts 资源文件夹

    我了解如何将一个 JavaScript 文件添加到 Rails 资产管道中 只需添加 require filename 到 application js 但是如何在一个文件夹下包含多个 javascript 文件 vendor assets
  • ubuntu 12.04 ruby​​ 2.0 Rails:找不到“thread_safe”

    我正在 ubuntu 12 04 上安装 Rails 使用以下方法手动安装 如何在 Ubuntu 12 04 上正确安装 ruby 2 0 0 https stackoverflow com questions 16222738 how t
  • 为 Rails 上的 postgresql 创建用户

    我选择 postgresql 作为我的 Rails 数据库 但当我尝试运行 rake db create all 时 我遇到了一个明显常见的错误 即 致命 角色 app 不存在 我找到了两种解决方案 但我不确定哪一种是正确的 有一个网站说

随机推荐

  • 如何像 Windows 10 气球提示一样显示气球提示而不拉伸图标

    我有 WPF 桌面应用程序 它使用以下方式推送一些通知 NotifyIcon ShowBalloonTip ToolTipIcon None 问题是 Windows 10 使用新的 带有图像和文本的 Windows 10 矩形 样式进行气球
  • 在 Google 地图对象上添加 3D 图层

    我想添加一个 3D 图层 在 Google 地图上显示云位置和海拔 这个想法是 当您倾斜地图 在地球模式下按住 Ctrl 键并拖动 时 您可以看到每朵云的高度 我发现这篇文章解释了如何添加 3D 建筑物 但它是 假的 欺骗纬度以获得一些高度
  • 解析数百万个小 XML 文件

    我有 1000 万个小 XML 文件 300KB 500KB 我在 Mapreduce 中使用 Mahaout 的 XML 输入格式来读取数据 并使用 SAX 解析器进行解析 但处理速度非常慢 使用输入文件的压缩 lzo 有助于提高性能吗
  • 为 Magento 属性创建新选项

    我在尝试在 管理选项 选项卡中创建新选项时遇到问题 当您创建属性时 我知道如何将数据正确保存在数据库中 我正在更换Mage Adminhtml Block Catalog Product Attribute Edit Tab Options
  • Reflect.getOwnMetadata 不是具有 karma-typescript 的函数

    我正在尝试进行单元测试 使用 Karma Jasmine 业力打字稿 https www npmjs com package karma typescript 我的 TypeScript 项目 项目结构如下 root src ts all
  • Lucene 与 PHP

    我可以将 Lucene 与 PHP 一起使用吗 我不想使用 Zend 我可以在本机 PHP 非框架 中使用吗 我建议使用阿帕奇SOLR http lucene apache org solr 作为您的 Lucene 后端 并通过 PHP 代
  • 如何使用 Java 8 DateTimeFormatter 更改解析两个字母年份的基准日期?

    如果我使用类似的模式d M yy用于创建 Java 8 DateTimeFormatter 例如使用DateTimeFormatter ofPattern pattern 我只会用于解析 而不是格式化 它将所有两个字母的年份解释为 20xx
  • 具有列表项选择样式的 LongListSelector

    我正在使用 Windows Phone 8 并且我有长列表选择器 其中几乎没有项目 我使用下面的代码来突出显示列表框中所选的项目 但我希望 LongListSelector 能够达到相同的效果 怎么做
  • 在确保翻译单元之间的可用性时是否不推荐使用静态?

    从以下堆栈溢出答案 https stackoverflow com a 3416755 908939 用户说 这意味着该变量是翻译单元的本地变量 简单地说 到单个源文件 并且无法从外部访问 这 事实上 当前的 C 标准不推荐使用 stati
  • OSError: [Errno 12] 使用 python 多处理池时无法分配内存

    我正在尝试使用 Python 将函数并行应用于 5 个交叉验证集multiprocessing并对不同的参数值重复此操作 如下所示 import pandas as pd import numpy as np import multipro
  • 在 CalenderView 中仅显示单个月份,并在其他月份之间进行导航

    这是这个问题的后续问题 安卓 CalendarView 一次仅显示一个月的日历 https stackoverflow com questions 33810905 android calendarview show only one mo
  • iPad 应用程序 - 以编程方式更改语言

    我有一个需要两种语言的应用程序 英语和法语 我已经在各自的 en lproj 和 fr lproj 文件夹中设置了 Localized strings 文件 当我更改 iPad 的语言 在本机设置应用程序中 然后启动我的应用程序时 它确实如
  • 如何选择包含特殊字符的id?

    我正在处理无法修改的 HTML 片段 文档中的 ID 之一是 div div 这是完全有效的HTML5 id 语法 https www w3 org TR html5 dom html the id attribute 但是 不可能在 CS
  • 使用 jquery 旋转后其他元素的错误行为

    我编写了一些用于文本旋转 调整大小和文本拖动的代码 一开始一切都工作正常 请看这段代码 new div draggable containment bord create function new div css width auto dr
  • 抱歉,Instagram API 发生错误:此端点已停用 [重复]

    这个问题已经存在了 我正在使用带有网格插件的 WordPress 网站 昨天该插件工作得很好 我添加了新的访问令牌 今天它开始向我显示此错误 抱歉 Instagram API 发生错误 此端点已停用 Insatagram 的另一项突然变化是
  • 仅在特定片段上禁用右侧抽屉

    I have Activity with DrawerLayout 其中包含左抽屉和右抽屉 我想知道是否可以禁用特定片段的右侧抽屉 我读过关于mDrawerLayout setDrawerLockMode DrawerLayout LOCK
  • 使用 splrep 平滑轨迹

    从视频记录中可以提取出物体的轨迹head行人穿过瓶颈的情景 因为 行人在移动轨迹时摇摆包含我想消除的令人讨厌的振荡 平滑算法与这个问题无关 结果显示在此figure http postimage org image mt83l9lu3 因此
  • Scrum 和 Fogbugz [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有人同时使用 Fogbugz 和 Scrum 吗 我们广泛使用 Fogbugz 并且我正在寻找任何可能将其用作 Scrum 一部分的人的想法 我
  • += 到底做了什么?

    我需要知道什么 在 Python 中是这样的 就是这么简单 我也希望链接到 Python 中其他速记工具的定义 在Python中 是糖衣 iadd 特殊方法 或 add or radd if iadd 不存在 这 iadd 类的方法可以做任
  • mixin 是否应该对其包含类做出假设?

    我找到了一个 mixin 的示例 它对包含类具有哪些实例变量进行假设 像这样的事情 module Fooable def calculate val one val two end end class Bar attr accessor v