Je connais écrire comme Il imprimera: mais maintenant je reçois cela chaîne comme paramètre comme p> méthode d'appel passe cette chaîne sous forme de paramètre p> y a-t-il un moyen d'évaluer cette chaîne à l'intérieur de la méthode? Je dois lire et exécuter le programme de Excel. P> à la première ligne, P> Saisie Excel est, P> la valeur d'A est 23 code>. p> met la chaîne code> doit interpoler la valeur A = 23. p> "the value of a is 23" compare "the value of a is #{a}"
4 Réponses :
Vous pouvez créer un bloc, puis évaluer la chaîne:
non non! Cette chaîne la valeur d'A est # {A} code> est dynamique, pour un exemple, la prochaine fois que je peux recevoir quelque chose comme plan # {A} émis code>
C'est une chose très étrange que vous essayez de faire. Lorsque vous avez une sorte de motif avec des espaces réservés, vous le faites comme: une interpolation de chaîne avec # {..} code> n'est pas destiné au cas que vous " Re décrivant comme la valeur est évaluée au moment de la construction de la chaîne, non plus tard. Vous pouvez faire une certaine correspondance de Regexp et remplacer le # {..} code> avec % {..} code> comme solution de contournement. P> p>
Le format de noyau code> est tolérant à fournir plus de paramètres d'interpolation que la chaîne réellement, par exemple format "la valeur d'un% {b}", A: '23, B: 42 code>. J'ai du mal à comprendre ce que vous essayez d'accomplir.
Si ce n'est qu'une variable ou l'ordre des paramètres est identique à celui de la chaîne, alors Stackoverflow.com/a/62607973/ 1205724 est parfaitement bien.
pour RUBY, vous pouvez modifier la manière dont vous "formatez" vos chaînes dans Excel, que vous pouvez utiliser "Classic" Formatage
dynamic_text = 'the value of the %s is %0.2f' def evaluate(text, args) puts text % args end name = "Product" price = 78.99 evaluate dynamic_text, [name, price]
L'utilisateur donnera cette chaîne dans Excel 'La valeur d'A est% s' code> et ils définiraient également la valeur d'un Excel. J'ai écrit un code pour définir la valeur d'A à l'aide de instance_variable_set code> mais en utilisant votre code, il doit donner le nom de la variable à l'intérieur de la chaîne. Mais ce n'est pas le cas dans votre code.
L'utilisateur n'a pas besoin de donner un nom de variable, le nom de la variable peut être n'importe quoi. Avec des arguments nommés, il vous suffit de faire correspondre le hash donné à la méthode évaluer code> et les noms utilisés dans la chaîne dynamique.
@Rajagopalan, si les utilisateurs se définiront des valeurs dans Excel, il vous suffit de "convertir" des valeurs dans Excel vers le nom de hachage {valorisation: nom} et transmettez-le sur le Evaluate code> méthode
Nan. Il est difficile de vous expliquer. Mais merci pour vous essayer!
@Rajagopalan, pouvez-vous montrer comment vous obtenez des valeurs de l'Excel? Parce que si les utilisateurs définissent des valeurs dans Excel, ils doivent nommer que les valeurs sont en quelque sorte. S'ils mettent un nom pour la valeur, vous pouvez le convertir en hachage. S'ils mettent des valeurs sans noms, ils utilisent probablement une commande de valeurs comme moyen de reconnaître quelle valeur est ce. Dans ce cas, vous pouvez convertir des valeurs en une matrice et le transmettre à il évalue la méthode - et cela fonctionne
Votre réponse m'a vraiment aidé! Merci.
Il y a quelques manières:
évaluation paresseuse avec lambdas: p> Ceci est "Dynamique de code", mais Pas "Entrée dynamique", c'est-à-dire que vous ne pouvez pas recevoir le modèle de chaîne de l'utilisateur. p> Templation ERB: P> "entrée" dynamique 1 h1>
user_input_ruby_code = gets
puts user_input_ruby_code # '"Hello #{name}"'
name = gets # also user input, e.g. "World"
eval user_input_ruby_code # DANGER
# => "Hello World"
Je dis "bla bla # {str}" code> est dynamique! Alors comment ça marche ça marche? oui c'est le code dynamique ~
Vous souhaitez recevoir un modèle de chaîne de l'utilisateur? Il y a plus d'une façon d'être dynamique, vous devriez clarifier.
Utilisateur d'abord la valeur de A, puis l'utilisateur donnera à la chaîne d'entrée dans l'Excel comme la valeur d'A est # {A} code>.
Mis à jour pour ajouter un exemple de "entrée" dynamique. Remarque: cette version nécessite une entrée de confiance de confiance.
Mis à jour la question maintenant.
Vous ne pouvez pas recevoir
"la valeur d'A IS # {A}" code> sans avoir définiA code> précédemment, car cela poserait une exception NameError. Avez-vous vérifié cela?Je peux recevoir cela comme une chaîne. Je lis la chaîne d'Excel et l'exécutant dans mon programme, donc je reçois
la valeur d'A est # {A} code> comme chaîne, de sorte que cela ne lancerait aucune erreur.FYI, si vous voulez faire exactement cela, vous devez autoriser l'exécution du code d'entrée utilisateur, qui introduirait un vecteur d'attaque d'injection. Voir ma réponse pour plus d'informations.
@Kache je l'ai détaillé maintenant dans ma question, pouvez-vous le renvoyer?
Je ne peux pas offrir des suggestions qui ne sont pas couverts ici .