首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpalRB忽略编译指令

OpalRB忽略编译指令
EN

Stack Overflow用户
提问于 2014-06-13 03:02:47
回答 2查看 73关注 0票数 1

我正在构建一个应用程序,它既可以作为独立的应用程序托管,也可以在web浏览器中运行。这意味着某些类应该以不同的方式实现(但以相同的方式使用)。示例:

代码语言:javascript
复制
If OPAL_RB
  require 'javascript_aware_lib'
else
  require 'native_lib'
end

问题是,Ruby会在运行时对其进行评估,而Opal会在编译时对其进行评估。如果不是这样,我可以简单地使用一个救援条款:

代码语言:javascript
复制
begin   
  RUBY_ENGINE_VERSION
  #opal requires goes here
rescue
  # MRI Ruby requires goes here 
end

所以,简单地说:有没有任何类型的指令或变通方法来阻止Opal评估代码块?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-06-16 06:00:17

使用unless RUBY_ENGINE == 'opal',它实际上在编译时被跳过。这使得跳过也不支持的语法是有效的。还支持ifelseRUBY_PLATFORM

示例:

代码语言:javascript
复制
if RUBY_ENGINE == 'opal'
  require 'javascript_aware_lib'
else
  require 'native_lib'
end

一些相关的代码(对于好奇的人来说)

处理AST的编译器:https://github.com/opal/opal/blob/ef570e3ddde9bddc48cc0f94c00e80576140850f/lib/opal/nodes/if.rb#L10-L15

Changelog:https://github.com/opal/opal/blob/8a023f057799fd68fecb3371b52950c7392d469c/CHANGELOG.md#060-2014-03-05

规格:https://github.com/opal/opal/blob/0aef3c6c7a5db8ff86c8f786a5ea6885ea2b12dc/spec/cli/compiler_spec.rb#L86-L121

票数 0
EN

Stack Overflow用户

发布于 2014-06-16 10:59:52

我刚找到这段代码

代码语言:javascript
复制
if defined?(Opal) && defined?(File)  
  Opal.append_path File.expand_path('.', File.dirname(__FILE__))
end

this interesting blogpost中编写用于MRI、opalrb和RubyMotion的交叉红宝石。你可能也会感兴趣。它使用Opal类的存在来确定ruby解释器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24192018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档