Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:如何编写“Stringscrub”和“Objectpresence”?_Ruby_Utf 8 - Fatal编程技术网

Ruby:如何编写“Stringscrub”和“Objectpresence”?

Ruby:如何编写“Stringscrub”和“Objectpresence”?,ruby,utf-8,Ruby,Utf 8,我想简单地使用Stringscrub和Objectpresence。基本上,我有以下代码: some_name = params[:name].presence || 'nobody' 这意味着,如果params[:name]存在,那么一些\u name=params[:name],其他一些\u name='nobody' 如果我尝试使用该方法,我会得到一个ArgumentError:UTF-8错误中的无效字节序列: 为了解决这个问题,我尝试在bugs.ruby-lang.org上使用Stri

我想简单地使用Stringscrub和Objectpresence。基本上,我有以下代码:

some_name = params[:name].presence || 'nobody'
这意味着,如果params[:name]存在,那么一些\u name=params[:name],其他一些\u name='nobody'

如果我尝试使用该方法,我会得到一个ArgumentError:UTF-8错误中的无效字节序列:

为了解决这个问题,我尝试在bugs.ruby-lang.org上使用Stringscrub,该文件在ruby 2.1中提供,或者使用Stringscrub-gem

assert_equal("\uFFFD\uFFFD\uFFFD", u("\x80\x80\x80").scrub)
最后,我想写下:

some_name = params[:name].scrub.presence || 'nobody'
这将为nil:NilClass带来nil.scrub=>未定义的方法'scrub'

最后我写道:

some_name = 'nobody' unless params[:name].is_a?(String)
some_name = params[:name].scrub.presence || 'nobody'
我很困惑,我想要更简单的代码

编辑:没有像NilClassscrub、Fixnumscrub、Arrayscrub这样的方法,只有Stringscrub。

使用:

或者使用“尝试”:

使用:

或者使用“尝试”:

因此,在这种情况下,您可以使用try:

some_name = params[:name].try(:scrub).presence || 'nobody'
因此,在这种情况下,您可以使用try:

some_name = params[:name].try(:scrub).presence || 'nobody'

@bjhaid的评论,params[:name]。是否答复?:擦洗?params[:name]:“没人”让我想到:

name = params[:name].respond_to?(:scrub) ? params[:name].scrub : params[:name]
@name = name.presence || 'nobody'

谢谢。

@bjhaid的评论,params[:name]。回复?:擦洗?params[:name]:“没人”让我想到:

name = params[:name].respond_to?(:scrub) ? params[:name].scrub : params[:name]
@name = name.presence || 'nobody'
谢谢。

另一种解决方案:

我创造了很棒的磨砂宝石

这就实现了,

之前:

name = params[:name].respond_to?(:scrub) ? params[:name].scrub : params[:name]
@name = name.presence || 'nobody'
之后:

@name = awesome_scrub(params[:name]).presence || 'nobody'
另一个解决方案:

我创造了很棒的磨砂宝石

这就实现了,

之前:

name = params[:name].respond_to?(:scrub) ? params[:name].scrub : params[:name]
@name = name.presence || 'nobody'
之后:

@name = awesome_scrub(params[:name]).presence || 'nobody'

params[:name]| | |“nobody”有什么问题?请检查:| | nobodyparams[:name]。是否响应?:清除?params[:name]:“nobody”params[:name]| | |“nobody”有什么问题吗?检查此项:| | nobodyparams[:name]。响应?:擦洗?参数[:名称]:“无人”