Ruby frozen string literal pragma order导致错误
Ruby frozen string literal pragma order caused error
给定一个文件 Ruby 2.3.0p0:
#!/usr/bin/env ruby
# frozen_string_literal: true
# Exit cleanly from an early interrupt
Signal.trap("INT") { abort }
这很好。
# frozen_string_literal: true
#!/usr/bin/env ruby
# Exit cleanly from an early interrupt
Signal.trap("INT") { abort }
会导致错误:
syntax error near unexpected token `"INT"'
`Signal.trap("INT") { abort }'
为什么?
shebang 必须出现在文件的初始行。
一个文件 test.rb
包含:
#!/usr/bin/env ruby
# foo bar
puts "hello from #{RbConfig.ruby}"
将是 运行 通过 Ruby:
$ ./test.rb
hello from /.../ruby-2.3.0/bin/ruby
但如果 test.rb
包含:(第 1 行和第 2 行交换)
# foo bar
#!/usr/bin/env ruby
echo "hello from $SHELL"
它将运行作为一个普通的shell脚本:
$ ./test.rb
hello from /.../bin/zsh
因此,您得到的错误不是 Ruby 错误,它来自您的 shell。
给定一个文件 Ruby 2.3.0p0:
#!/usr/bin/env ruby
# frozen_string_literal: true
# Exit cleanly from an early interrupt
Signal.trap("INT") { abort }
这很好。
# frozen_string_literal: true
#!/usr/bin/env ruby
# Exit cleanly from an early interrupt
Signal.trap("INT") { abort }
会导致错误:
syntax error near unexpected token `"INT"'
`Signal.trap("INT") { abort }'
为什么?
shebang 必须出现在文件的初始行。
一个文件 test.rb
包含:
#!/usr/bin/env ruby
# foo bar
puts "hello from #{RbConfig.ruby}"
将是 运行 通过 Ruby:
$ ./test.rb
hello from /.../ruby-2.3.0/bin/ruby
但如果 test.rb
包含:(第 1 行和第 2 行交换)
# foo bar
#!/usr/bin/env ruby
echo "hello from $SHELL"
它将运行作为一个普通的shell脚本:
$ ./test.rb
hello from /.../bin/zsh
因此,您得到的错误不是 Ruby 错误,它来自您的 shell。