我正在构建一个应用程序,它既可以作为独立的应用程序托管,也可以在web浏览器中运行。这意味着某些类应该以不同的方式实现(但以相同的方式使用)。示例:
If OPAL_RB
require 'javascript_aware_lib'
else
require 'native_lib'
end问题是,Ruby会在运行时对其进行评估,而Opal会在编译时对其进行评估。如果不是这样,我可以简单地使用一个救援条款:
begin
RUBY_ENGINE_VERSION
#opal requires goes here
rescue
# MRI Ruby requires goes here
end所以,简单地说:有没有任何类型的指令或变通方法来阻止Opal评估代码块?谢谢。
发布于 2014-06-16 06:00:17
使用unless RUBY_ENGINE == 'opal',它实际上在编译时被跳过。这使得跳过也不支持的语法是有效的。还支持if、else和RUBY_PLATFORM。
示例:
if RUBY_ENGINE == 'opal'
require 'javascript_aware_lib'
else
require 'native_lib'
end一些相关的代码(对于好奇的人来说)
发布于 2014-06-16 10:59:52
我刚找到这段代码
if defined?(Opal) && defined?(File)
Opal.append_path File.expand_path('.', File.dirname(__FILE__))
end在this interesting blogpost中编写用于MRI、opalrb和RubyMotion的交叉红宝石。你可能也会感兴趣。它使用Opal类的存在来确定ruby解释器。
https://stackoverflow.com/questions/24192018
复制相似问题