我正在构建一个应用程序,既可以作为独立应用程序托管,也可以在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不评估代码块?感谢。
答案 0 :(得分:0)
使用unless RUBY_ENGINE == 'opal'
,它在编译时实际被跳过。这使得跳过不支持的语法也很有效。 <!{1}},if
和else
也受支持。
示例:
RUBY_PLATFORM
答案 1 :(得分:0)
我刚发现这段代码
if defined?(Opal) && defined?(File)
Opal.append_path File.expand_path('.', File.dirname(__FILE__))
end
在this interesting blogpost中为MRI,opalrb和RubyMotion编写cross ruby gems。也可能对你有意思。它使用Opal
类的存在来确定ruby解释器。