ruby-on-rails - 如何在 ruby​​/rails 中定义 C/C++ 样式的宏

标签 ruby-on-rails ruby macros

我注意到 ruby​​ on rails 有一些小的宏,有 c 的感觉。

__FILE__ and __LINE__

例如。这使得调试和生成唯一的缓存键变得更加容易。

store = Rails.cache.fetch("#{__FILE__}|#{__LINE__}|#{self.store_id}")... 

当我可能会为一组给定的订单反复获得同一家商店时最方便。

不过我想知道的是;我可以创建自己的宏/定义吗?预编译代码虽然有时不是一个好主意,但确实有它的用武之地。

问题:有没有办法在 ruby​​/rails 中创建 c 风格的宏?

最佳答案

它们看起来像 C,但它们不是宏,它们只是对象,就像 ruby​​ 中的其他所有内容一样,它们特别具有确定当前正在解释的文件的名称和行号的能力。

C 宏只是对编译时可执行代码的引用。 Ruby 是...就像,完全,完全相反:-) ruby​​ 中的编译实际上是语法评估然后解释。如果某些语言(如 C、C++ 和 Java)是早期绑定(bind),而其他语言(如 PHP 和 Python)是后期绑定(bind),则 ruby​​ 错过了公交车,将在最后一刻到达那里。

因此,如果您想创建自己的东西,请创建一个模块和/或包含内部内容的类。您在内部创建的将是实例或类的变量、符号、常量或方法,可能是局部的,可能是公共(public)的、 protected 或私有(private)的。使用特殊命名约定 __FOO__ 或其他命名约定(即使它们是有效名称)通常不是好的形式。

(答案结束......如果我听到你在问什么,也许这会帮助你实现所需的精神飞跃)......

我从 C 转到 C++,再转到 Java,然后转到 Ruby。在为改过自新的 Java 程序员开设的诊所中短暂停留后,我能够理解 ruby​​ 的强大功能有多么惊人。但你真的必须考虑如何以不同的方式解决问题。

我强烈推荐这本书 Eloquent Ruby, linked here to Amazon .

关于ruby-on-rails - 如何在 ruby​​/rails 中定义 C/C++ 样式的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13617511/

相关文章:

ruby-on-rails - 数值字段Simple_form_for

mysql - 捆绑执行 rake Assets 期间不存在 mysql 适配器 :precompile

html - 用 ruby​​ 编写 HTML

宏可以从其参数中删除字符吗?

scala - 测试隐式是否存在

ruby-on-rails - rails 生成 rspec :install - no such file to load --sprockets/railtie (LoadError)

javascript - Rails 4 - jQuery 和 bootstrap 的顺序是什么?

ruby-on-rails - Ruby on Rails activerecord 在一个 sql 和 Will_Paginate 中找到平均值

ruby-on-rails - "Rake spec"大多数测试失败,但 "rails s"在 Diaspora 源上工作正常

C 调试打印宏不打印