Ruby中的File.load和File.read之间的区别

时间:2012-09-27 17:49:10

标签: ruby sass

我正在尝试关注Sass - > Sass website上的CSS转换器代码。

template = File.load('stylesheets/sassy.sass')
sass_engine = Sass::Engine.new(template)
output = sass_engine.render
puts output

我在尝试File.load

时遇到此错误
SyntaxError in PublishController#index

/Users/jkim/rails/support-rhapsody/app/assets/stylesheets/application.sass:1: target of repeat operator is not specified: /* http:/
/Users/jkim/rails/support-rhapsody/app/assets/stylesheets/application.sass:2: no .<digit> floating literal anymore; put 0 before dot
   v2.0 | 20110126
      ^
/Users/jkim/rails/support-rhapsody/app/assets/stylesheets/application.sass:2: syntax error, unexpected tINTEGER
   v2.0 | 20110126
       ^
/Users/jkim/rails/support-rhapsody/app/assets/stylesheets/application.sass:3: syntax error, unexpected ':', expecting $end
   License: none (public domain) */

但是当我执行File.read时,它会正常工作,直到output = sass_engine.render

我收到此错误,

NoMethodError in PublishController#index

undefined method `[]' for nil:NilClass

File.read和File.load之间有什么区别?如果你知道如何在Sass中解决这个问题,那就更好了。

1 个答案:

答案 0 :(得分:1)

在Ruby Kernel方法#load中,它意味着评估加载为代码的文本,这就是在这里完成的。 File.read将文本加载为String。

来自Sass::Engine.new

的sass文档
  

创建一个新引擎。请注意,只应在编译内存中的Sass代码时直接使用Engine。如果要从文件系统编译单个Sass文件,请使用Sass :: Engine.for_file。如果您正在从文件系统编译多个文件,请使用Sass :: Plugin。

这样做。