Είναι δυνατόν να περάσει ονόματα μέθοδο ως επιχείρημα λειτουργία περιτύλιγμα στον τομέα της Ε;

ψήφοι
1

Είμαι εργάζονται για ένα R σενάριο βασίζεται σε βιβλιοθήκη RSelenium που έχει ως στόχο να χρησιμοποιεί «ξύσιμο σενάρια» με τη μορφή ενός tibble. Ως εκ τούτου, θα ήθελα να χρησιμοποιήσετε μια λειτουργία, που σύμφωνα με ορισμένα επιχειρήματα που θα επιστρέψει η συγκεκριμένη ενέργεια του απομακρυσμένου οδηγού. Η γενική ιδέα είναι να έχουμε κάτι που θα μετατρέψει επιχειρήματα για τις μεθόδους σύνταξης:

scraper(driver, method, arguments) == driver$method(arguments)

Έτσι, αν καλώ:

scraper(remDr, open) - it simply does - remDr$open()
scraper(remDr, navigate, https://google.com) - it does - remDr$navigate(https://google.com)
scraper(remDr, findElement, list(using = xpath, [@=...]) - it does - remDr$findElement(xpath, [@=...])

Εδώ είναι το δείγμα που έχω καταλήξει με:

scraper <- function(driver, method, arguments = ) {

  open <- function(driver) {
    return(
        driver$open()
    )
  }

  close <- function(driver) {
    return(
        driver$close()
      )
  }

  navigate <- function(driver, arguments) {
    return(
        driver$navigate(arguments)
      )
  }

  findElement <- function(driver, arguments) {
    return(
        driver$findElement(arguments)
      )
  }

  scraperMethods <- list(open = open, 
                         close = close, 
                         navigate = navigate, 
                         findElement = findElement)

  return(scraperMethods[[method]](arguments))

}

Το διπλό παρένθεση σύμβαση στην scraperMethods [[μέθοδος]] φαίνεται να λειτουργεί στο παγκόσμιο περιβάλλον, αλλά όταν καλώ

scraper(remDr, open)

ή άλλες μεθόδους που ορίζονται μέχρι στιγμής κατά την λειτουργία ξύστρα. Ρίχνει ένα σφάλμα:

Σφάλμα: χειριστής $ δεν είναι έγκυρο για την ατομική φορείς

Έτσι, οι ερωτήσεις μου είναι οι εξής: 1. Είναι αυτή η σωστή προσέγγιση; 2. Αν όχι - είναι πιο βολικός τρόπος για να επιτευχθεί ο στόχος μου;

Ευχαριστώ εκ των προτέρων για όλες τις απαντήσεις.

Δημοσιεύθηκε 09/10/2019 στις 18:52
πηγή χρήστη
Σε άλλες γλώσσες...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more