¿Qué significa el operador de signo de interrogación en Ruby?
¿Cuál es el propósito del operador de signo de interrogación en Ruby?
A veces aparece así:
assert !product.valid?
A veces está en una construcción if
.
9 answers
Es una convención de estilo de código; indica que un método devuelve un valor booleano.
El signo de interrogación es un carácter válido al final del nombre de un método.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-18 03:27:05
También tenga en cuenta ?
junto con un carácter, devolverá el código de caracteres ASCII para A
Por ejemplo:
?F # => will return 70
Alternativamente en ruby 1.8 puedes hacer:
"F"[0]
O en ruby 1.9:
"F".ord
También observe que ?F
devolverá la cadena "F"
, por lo que para acortar el código, también puede usar ?F.ord
en Ruby 1.9 para obtener el mismo resultado que "F".ord
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-02 01:48:59
Es una convención en Ruby que los métodos que devuelven valores booleanos terminan en un signo de interrogación. No tiene más importancia que eso.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-28 09:08:27
En su ejemplo es solo parte del nombre del método. En Ruby también puede utilizar signos de exclamación en los nombres de los métodos!
Otro ejemplo de signos de interrogación en Ruby sería el operador ternario.
customerName == "Fred" ? "Hello Fred" : "Who are you?"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-28 09:16:52
En su ejemplo
product.valid?
Es en realidad una llamada de función y llama a una función llamada valid?
. Ciertos tipos de"test for condition" /funciones booleanas tienen un signo de interrogación como parte del nombre de la función por convención.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-18 03:29:12
¿Vale la pena señalar eso ?s solo se permiten en nombres de métodos, no en variables. En el proceso de aprender Ruby, ¿asumí eso ? designado un tipo de retorno booleano, así que intenté agregarlos a las variables de bandera, lo que llevó a errores. Esto me llevó a creer erróneamente por un tiempo que había alguna sintaxis especial que involucraba ?s.
Relevante: ¿Por qué un nombre de variable no puede terminar con `?'mientras que un nombre de método puede?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:18
Creo que es solo una convención para las cosas que son booleanas. Un poco como decir " IsValid
".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-05 20:59:52
También se usa en expresiones regulares, lo que significa "a lo sumo una repetición del carácter anterior"
, Por ejemplo, la expresión regular /hey?/
coincide con las cadenas "he
" y "hey
".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-18 03:28:16
También es una convención común para usar con el primer argumento del método test de Kernel # test
irb(main):001:0> test ?d, "/dev" # directory exists?
=> true
irb(main):002:0> test ?-, "/etc/hosts", "/etc/hosts" # are the files identical
=> true
Como se ve en esta pregunta aquí
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-01 17:01:31