ruby TypeError - 没有将Fixnum隐式转换为String?

时间:2017-04-25 04:02:12

标签: ruby eval

我试图评估此功能并显示

此错误

TypeError - 没有将Fixnum隐式转换为String

if let nsvigationVC = self.window?.rootViewController as? UINavigationController  {
        if yourVC = nsvigationVC.visibleViewController {
            //Add the code here to present signupviewcontroller as form sheet
            let sb = UIStoryboard(name: “Main”, bundle: nil) //get signupviewcontroller from storyboard
            let signupVC = sb.instantiateViewControllerWithIdentifier("signupviewcontroller") as! signupviewcontroller
            signupVC.modalPresentationStyle = UIModalPresentationStyle.FormSheet
            signupVC.preferredContentSize = CGSize(width: 365, height: 500) // set content size as per your requirement
            yourVC.presentViewController(signupVC, animated: true, completion: nil)
        }

    }

我如何解决

1 个答案:

答案 0 :(得分:3)

此代码非常非常风险,我无法在一开始就看到这样做的原因。删除eval并获得这个非常普通的代码:

File.open('nagai.txt', 'a+') do |f|
  f.puts parts[params[:salutation]]
end

错误来自于在构造代码eval的过程中尝试将Fixnum / Integer连接到String。此代码无效并产生相同的错误:

"1" + 1

Ruby不像其他语言,如JavaScript,PHP或Perl,它们可以任意将整数转换为字符串,反之亦然。两者之间存在严格的分离,必须使用.to_s.to_i等内容指定任何转化。

固定版本应该是等效的。如果您需要将其推迟到稍后的某个时间点,您可以编写一个方法:

def write_nagai(params)
  File.open('nagai.txt', 'a+') do |f|
    f.puts parts[params[:salutation]]
  end
end