价值||不是String - scala的成员

时间:2015-06-29 23:55:10

标签: scala

我正在使用字符串过滤功能,如:

||

过滤某些字词。但我收到编译错误说 - 值String不是app.config.update( DEBUG=True, #EMAIL SETTINGS MAIL_SERVER='smtp.gmail.com', MAIL_PORT=465, MAIL_USE_SSL=True, MAIL_USE_TLS= False, MAIL_USERNAME = 'myemail@gmail.com', MAIL_PASSWORD = 'mypass' ) mail = Mail(app) @app.route('/api/account', methods= ['POST']) def login(): e= request.json ['email'] u= request.json ['user'] p= request.json ['pass'] msg= Message("Your password", sender= 'myemail@gmail.com',recipients = ['destinationemail']) msg.body= 'Your password is ' + hashedp #msg.html ='<b> password </b>' mail.send(msg) return 'Your new password has been sent through email' 的成员。谁能告诉我哪里出错了?

1 个答案:

答案 0 :(得分:7)

contains上的方法StringString为参数:

"foo".contains("foo") //True

因此,编译器试图将"I" || "sam"解释为String,因为这是contains的参数。在Scala中,此语句等同于"I".||("sam")(在||上调用"I"方法)。由于||上没有方法String,因此无法编译。

你的意思是!(word.contains("I") || word.contains("sam"))。这是有道理的,因为我们现在在||Boolean上调用word.contains("I"),而||Boolean上的方法(如文档{ {3}})。所以你的整个陈述可能是:

strings.filter(word => !(word.contains("I") || word.contains("sam"))

这相当于:

strings.filter(word => !word.contains("I") && !word.contains("sam"))

如果你最终要过滤很多短语,你也可以翻转它:

val segments = Set("I", "sam")
strings.filter(word => segments.forall(segment => !word.contains(segment)))
//Equivalent
strings.filter(word => !segments.exists(word.contains))